blob: 4d85244fc5cc1494b93ec5b7d94a79d9ef78e8b8 [file] [log] [blame]
/*
* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef _DSI_PWR_H_
#define _DSI_PWR_H_
#include <linux/device.h>
#include <linux/platform_device.h>
#include <linux/types.h>
#include <linux/regulator/consumer.h>
/**
* struct dsi_vreg - regulator information for DSI regulators
* @vreg: Handle to the regulator.
* @vreg_name: Regulator name.
* @min_voltage: Minimum voltage in uV.
* @max_voltage: Maximum voltage in uV.
* @enable_load: Load, in uA, when enabled.
* @disable_load: Load, in uA, when disabled.
* @pre_on_sleep: Sleep, in ms, before enabling the regulator.
* @post_on_sleep: Sleep, in ms, after enabling the regulator.
* @pre_off_sleep: Sleep, in ms, before disabling the regulator.
* @post_off_sleep: Sleep, in ms, after disabling the regulator.
*/
struct dsi_vreg {
struct regulator *vreg;
char vreg_name[32];
u32 min_voltage;
u32 max_voltage;
u32 enable_load;
u32 disable_load;
u32 pre_on_sleep;
u32 post_on_sleep;
u32 pre_off_sleep;
u32 post_off_sleep;
};
/**
* struct dsi_regulator_info - set of vregs that are turned on/off together.
* @vregs: Array of dsi_vreg structures.
* @count: Number of vregs.
* @refcount: Reference counting for enabling.
*/
struct dsi_regulator_info {
struct dsi_vreg *vregs;
u32 count;
u32 refcount;
};
/**
* dsi_pwr_of_get_vreg_data - parse regulator supply information
* @of_node: Device of node to parse for supply information.
* @regs: Pointer where regulator information will be copied to.
* @supply_name: Name of the supply node.
*
* return: error code in case of failure or 0 for success.
*/
int dsi_pwr_of_get_vreg_data(struct device_node *of_node,
struct dsi_regulator_info *regs,
char *supply_name);
/**
* dsi_pwr_get_dt_vreg_data - parse regulator supply information
* @dev: Device whose of_node needs to be parsed.
* @regs: Pointer where regulator information will be copied to.
* @supply_name: Name of the supply node.
*
* return: error code in case of failure or 0 for success.
*/
int dsi_pwr_get_dt_vreg_data(struct device *dev,
struct dsi_regulator_info *regs,
char *supply_name);
/**
* dsi_pwr_enable_regulator() - enable a set of regulators
* @regs: Pointer to set of regulators to enable or disable.
* @enable: Enable/Disable regulators.
*
* return: error code in case of failure or 0 for success.
*/
int dsi_pwr_enable_regulator(struct dsi_regulator_info *regs, bool enable);
#endif /* _DSI_PWR_H_ */