/*
 * Google LWIS Regulator Interface
 *
 * Copyright (c) 2018 Google, LLC
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef LWIS_REGULATOR_H_
#define LWIS_REGULATOR_H_

#include <linux/regulator/consumer.h>

struct lwis_regulator {
	struct regulator *reg;
	char *name;
	int voltage;
};

struct lwis_regulator_list {
	struct lwis_regulator *reg;
	int count;
};

/*
 *  lwis_regulator_list_alloc: Allocate an instance of the lwis_regulator_list
 *  and initialize the data structures according to the number of regulators
 *  specified.
 *  NOTE: This does not register the regulator structs.
 */
struct lwis_regulator_list *lwis_regulator_list_alloc(int num_regs);

/*
 *  lwis_regulator_list_free: Deallocate the lwis_regulator_list structure.
 */
void lwis_regulator_list_free(struct lwis_regulator_list *list);

/*
 *  lwis_regulator_get: Register the regulator by name.
 *  Returns: index number (>= 0) if success, -ve if error
 */
int lwis_regulator_get(struct lwis_regulator_list *list, char *name, int voltage,
		       struct device *dev);

/*
 *  lwis_regulator_put_by_idx: Unregister the regulator by index.
 *  Returns: 0 if success, -ve if error
 */
int lwis_regulator_put_by_idx(struct lwis_regulator_list *list, int index);

/*
 *  lwis_regulator_put_by_name: Unregister the regulator by index.
 *  Returns: 0 if success, -ve if error
 */
int lwis_regulator_put_by_name(struct lwis_regulator_list *list, char *name);

/*
 *  lwis_regulator_enable_by_idx: Turn on/enable the regulator by index.
 *  Returns: 0 if success, -ve if error
 */
int lwis_regulator_enable_by_idx(struct lwis_regulator_list *list, int index);

/*
 *  lwis_regulator_enable_by_name: Turn on/enable the regulator by name.
 *  Returns: 0 if success, -ve if error
 */
int lwis_regulator_enable_by_name(struct lwis_regulator_list *list, char *name);

/*
 *  lwis_regulator_enable_all: Turn on/enable all the regulators.
 *  Returns: 0 if success, -ve if error
 */
int lwis_regulator_enable_all(struct lwis_regulator_list *list);

/*
 *  lwis_regulator_disable_by_idx: Turn off/disable the regulator by index.
 *  Returns: 0 if success, -ve if error
 */
int lwis_regulator_disable_by_idx(struct lwis_regulator_list *list, int index);

/*
 *  lwis_regulator_disable_by_name: Turn off/disable the regulator by name.
 *  Returns: 0 if success, -ve if error
 */
int lwis_regulator_disable_by_name(struct lwis_regulator_list *list, char *name);

/*
 *  lwis_regulator_disable_all: Turn off/disable all the regulators.
 *  Returns: 0 if success, -ve if error
 */
int lwis_regulator_disable_all(struct lwis_regulator_list *list);

/*
 *  lwis_regulator_print: Debug function to print all the regulators in the
 *  supplied list.
 */
void lwis_regulator_print(struct lwis_regulator_list *list);

#endif /* LWIS_REGULATOR_H_ */