本文整理汇总了C++中regulator_set_optimum_mode函数的典型用法代码示例。如果您正苦于以下问题:C++ regulator_set_optimum_mode函数的具体用法?C++ regulator_set_optimum_mode怎么用?C++ regulator_set_optimum_mode使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了regulator_set_optimum_mode函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: mdss_edp_regulator_off
/*
* Disable vdda and set uA
*/
static int mdss_edp_regulator_off(struct mdss_edp_drv_pdata *edp_drv)
{
int ret;
ret = regulator_disable(edp_drv->vdda_vreg);
if (ret) {
pr_err("%s: Failed to disable vdda_vreg regulator.\n",
__func__);
return ret;
}
ret = regulator_set_optimum_mode(edp_drv->vdda_vreg, VDDA_UA_OFF_LOAD);
if (ret < 0) {
pr_err("%s: vdda_vreg set regulator mode failed.\n",
__func__);
return ret;
}
return 0;
}
开发者ID:Menpiko,项目名称:SnaPKernel-N6P,代码行数:23,代码来源:mdss_edp.c
示例2: msm_sata_vreg_put_disable
static int msm_sata_vreg_put_disable(struct device *dev,
struct regulator *reg, const char *name, int max_uV)
{
int ret;
if (!reg)
return 0;
ret = regulator_disable(reg);
if (ret) {
dev_err(dev, "Regulator: %s disable failed err=%d\n",
name, ret);
goto err;
}
if (regulator_count_voltages(reg) > 0) {
ret = regulator_set_voltage(reg, 0, max_uV);
if (ret < 0) {
dev_err(dev, "Regulator: %s set voltage to 0 failed, err=%d\n",
name, ret);
goto err;
}
ret = regulator_set_optimum_mode(reg, 0);
if (ret < 0) {
dev_err(dev, "Regulator: %s set optimum mode(uA_load = 0) failed, err=%d\n",
name, ret);
goto err;
} else {
/*
* regulator_set_optimum_mode() can return non zero
* value even for success case.
*/
ret = 0;
}
}
err:
devm_regulator_put(reg);
return ret;
}
开发者ID:kamarush,项目名称:caf_kernel_mm,代码行数:41,代码来源:ahci_msm.c
示例3: power_rail_on_stage
static int power_rail_on_stage(struct mmi_disp_reg_lst *reg_lst)
{
int i, rc = 0;
struct mmi_disp_reg *reg;
struct mmi_disp_gpio_config *en;
pr_debug("%s is called\n", __func__);
for (i = 0; i < reg_lst->num_disp_regs; i++) {
reg = ®_lst->disp_reg[i];
en = ®->en_gpio;
if (reg->reg_id[0] != '\0' && !IS_ERR_OR_NULL(reg->handle)) {
rc = regulator_set_optimum_mode(reg->handle, 100000);
if (rc < 0) {
pr_err("%s: failed to set_optimum for %s." \
"rc=%d\n", __func__, reg->reg_id, rc);
rc = -EINVAL;
goto end;
} else {
pr_debug("%s: set set_optimum for %s(100000)\n",
__func__, reg->reg_id);
rc = 0;
}
}
/*
* If reg has enable gpio line, or it doesn't gpio en because
* it is shared with other reg then it can be enable now
*/
if (!IS_ERR_OR_NULL(reg->handle)) {
if ((en->num >= 0) || (reg->shared_gpio_en == 1)) {
rc = panel_reg_enable(reg, 1);
if (rc)
goto end;
}
}
}
end:
return rc;
}
开发者ID:gustavosss,项目名称:android_kernel_motorola_msm8960dt-common,代码行数:41,代码来源:board-mmi-display.c
示例4: camera_sensor_power_enable
static int camera_sensor_power_enable(char *power, unsigned volt, struct regulator **sensor_power)
{
int rc;
if (power == NULL)
return -ENODEV;
*sensor_power = regulator_get(NULL, power);
if (IS_ERR(*sensor_power)) {
pr_err("[CAM] %s: Unable to get %s\n", __func__, power);
return -ENODEV;
}
if (strcmp(power, "8038_l17") == 0) {
regulator_set_optimum_mode(*sensor_power, 10000);
}
if (volt != 1800000) {
rc = regulator_set_voltage(*sensor_power, volt, volt);
if (rc < 0) {
pr_err("[CAM] %s: unable to set %s voltage to %d rc:%d\n",
__func__, power, volt, rc);
regulator_put(*sensor_power);
*sensor_power = NULL;
return -ENODEV;
}
}
rc = regulator_enable(*sensor_power);
if (rc < 0) {
pr_err("[CAM] %s: Enable regulator %s failed\n", __func__, power);
regulator_put(*sensor_power);
*sensor_power = NULL;
return -ENODEV;
}
return rc;
}
开发者ID:bgcngm,项目名称:802Xtreem,代码行数:39,代码来源:board-k2-camera.c
示例5: power_rail_off_unstage
static int power_rail_off_unstage(struct mmi_disp_reg_lst *reg_lst)
{
int i, rc = 0;
struct mmi_disp_reg *reg;
struct mmi_disp_gpio_config *en;
pr_debug("%s is called\n", __func__);
/* this is disable then it disables in reversed order */
for (i = reg_lst->num_disp_regs - 1; i >= 0; i--) {
reg = ®_lst->disp_reg[i];
en = ®->en_gpio;
/* If reg has en gpio line, then it can be disable now */
if (!IS_ERR_OR_NULL(reg->handle)) {
if ((en->num >= 0) || (reg->shared_gpio_en == 1)) {
rc = panel_reg_enable(reg, 0);
if (rc)
goto end;
}
}
if (reg->reg_id[0] != '\0' && !IS_ERR_OR_NULL(reg->handle)) {
rc = regulator_set_optimum_mode(reg->handle, 100);
if (rc < 0) {
pr_err("%s: failed to set_optimum for %s." \
"rc=%d\n", __func__, reg->reg_id, rc);
rc = -EINVAL;
goto end;
} else {
pr_debug("%s: set set_optimum for %s(100)\n",
__func__, reg->reg_id);
rc = 0;
}
}
}
end:
return rc;
}
开发者ID:gustavosss,项目名称:android_kernel_motorola_msm8960dt-common,代码行数:39,代码来源:board-mmi-display.c
示例6: ufs_qcom_phy_cfg_vreg
int ufs_qcom_phy_cfg_vreg(struct phy *phy,
struct ufs_qcom_phy_vreg *vreg, bool on)
{
int ret = 0;
struct regulator *reg = vreg->reg;
const char *name = vreg->name;
int min_uV;
int uA_load;
struct ufs_qcom_phy *ufs_qcom_phy = get_ufs_qcom_phy(phy);
struct device *dev = ufs_qcom_phy->dev;
BUG_ON(!vreg);
if (regulator_count_voltages(reg) > 0) {
min_uV = on ? vreg->min_uV : 0;
ret = regulator_set_voltage(reg, min_uV, vreg->max_uV);
if (ret) {
dev_err(dev, "%s: %s set voltage failed, err=%d\n",
__func__, name, ret);
goto out;
}
uA_load = on ? vreg->max_uA : 0;
ret = regulator_set_optimum_mode(reg, uA_load);
if (ret >= 0) {
/*
* regulator_set_optimum_mode() returns new regulator
* mode upon success.
*/
ret = 0;
} else {
dev_err(dev, "%s: %s set optimum mode(uA_load=%d) failed, err=%d\n",
__func__, name, uA_load, ret);
goto out;
}
}
out:
return ret;
}
开发者ID:auras76,项目名称:aur-kernel-XZxx,代码行数:38,代码来源:phy-qcom-ufs.c
示例7: pil_q6v4_power_up
static int pil_q6v4_power_up(struct device *dev)
{
int err;
struct q6v4_data *drv = dev_get_drvdata(dev);
err = regulator_set_voltage(drv->vreg, 1050000, 1050000);
if (err) {
dev_err(dev, "Failed to set regulator's voltage.\n");
return err;
}
err = regulator_set_optimum_mode(drv->vreg, 100000);
if (err < 0) {
dev_err(dev, "Failed to set regulator's mode.\n");
return err;
}
err = regulator_enable(drv->vreg);
if (err) {
dev_err(dev, "Failed to enable regulator.\n");
return err;
}
drv->vreg_enabled = true;
return 0;
}
开发者ID:DESHONOR,项目名称:kernel_huawei,代码行数:23,代码来源:pil-q6v4.c
示例8: ts_set_l17
static int ts_set_l17(int on)
{
int rc = -EINVAL;
static struct regulator *vreg_l17;
vreg_l17 = regulator_get(NULL, "8921_l17"); /* 3P0_L17_TOUCH */
if (IS_ERR(vreg_l17)) {
pr_err("%s: regulator get of touch_3p0 failed (%ld)\n"
, __func__, PTR_ERR(vreg_l17));
rc = PTR_ERR(vreg_l17);
return rc;
}
rc = regulator_set_voltage(vreg_l17,
MELFAS_VD33_MIN_UV, MELFAS_VD33_MAX_UV);
if (on) {
rc = regulator_set_optimum_mode(vreg_l17, MELFAS_VD33_CURR_UA);
rc = regulator_enable(vreg_l17);
} else {
rc = regulator_disable(vreg_l17);
}
return rc;
}
开发者ID:GameTheory-,项目名称:android_kernel_lge_l1m,代码行数:23,代码来源:board-lx-input.c
示例9: smsc_hub_remove
static int smsc_hub_remove(struct platform_device *pdev)
{
const struct smsc_hub_platform_data *pdata;
pdata = pdev->dev.platform_data;
if (smsc_hub->client) {
i2c_unregister_device(smsc_hub->client);
smsc_hub->client = NULL;
i2c_del_driver(&hsic_hub_driver);
}
pm_runtime_disable(&pdev->dev);
msm_xo_put(smsc_hub->xo_handle);
regulator_disable(smsc_hub->hsic_hub_reg);
regulator_set_optimum_mode(smsc_hub->hsic_hub_reg, 0);
regulator_set_voltage(smsc_hub->hsic_hub_reg, 0,
HSIC_HUB_VDD_VOL_MIN);
gpio_free(pdata->hub_reset);
regulator_put(smsc_hub->hsic_hub_reg);
kfree(smsc_hub);
return 0;
}
开发者ID:thedancomplex,项目名称:BMW-OpenSource,代码行数:23,代码来源:smsc_hub.c
示例10: usb_device_phy_en
/**
* usb_device_phy_en() - for enabling the 5V to usb gadget
* @enable: to enabling the Phy for device.
*
* This function used to set the voltage for USB gadget mode.
*/
static void usb_device_phy_en(int enable)
{
int volt = 0;
int ret = -1;
if (phy_enable_stat == enable)
return;
if (enable == USB_ENABLE) {
wake_lock(&ab8500_musb_wakelock);
ux500_pins_enable(usb_gpio_pins);
clk_enable(sysclock);
phy_enable_stat = USB_ENABLE;
regulator_enable(musb_vape_supply);
regulator_enable(musb_smps2_supply);
/* Set Vintcore12 LDO to 1.3V */
ret = regulator_set_voltage(musb_vintcore_supply,
1300000, 1350000);
if (ret < 0)
printk(KERN_ERR "Failed to set the Vintcore"
" to 1.3V, ret=%d\n", ret);
ret = regulator_set_optimum_mode(musb_vintcore_supply,
28000);
if (ret < 0)
printk(KERN_ERR "Failed to set optimum mode"
" (ret=%d)\n", ret);
regulator_enable(musb_vintcore_supply);
volt = regulator_get_voltage(musb_vintcore_supply);
if ((volt != 1300000) && (volt != 1350000))
printk(KERN_ERR "Vintcore is not"
" set to 1.3V"
" volt=%d\n", volt);
#ifdef CONFIG_PM
stm_musb_context(USB_ENABLE);
#endif
/* Workaround for USB performance issue. */
schedule_delayed_work_on(0,
&work_usb_workaround,
msecs_to_jiffies(USB_PROBE_DELAY));
prcmu_qos_update_requirement(PRCMU_QOS_APE_OPP,
DEVICE_NAME, 100);
abx500_set_register_interruptible(device,
AB8500_USB,
AB8500_USB_PHY_CTRL_REG,
AB8500_USB_DEVICE_ENABLE);
} else { /* enable == USB_DISABLE */
/*
* Workaround: Sometimes the DISCONNECT interrupt is
* not generated in musb_core. Force a disconnect if
* necessary before we power down the PHY.
*/
stm_musb_force_disconnect();
if (boot_time_flag)
boot_time_flag = USB_DISABLE;
/*
* Workaround for bug31952 in ABB cut2.0. Write 0x1
* before disabling the PHY.
*/
abx500_set_register_interruptible(device, AB8500_USB,
AB8500_USB_PHY_CTRL_REG,
AB8500_USB_DEVICE_ENABLE);
udelay(200);
abx500_set_register_interruptible(device,
AB8500_USB,
AB8500_USB_PHY_CTRL_REG,
AB8500_USB_DEVICE_DISABLE);
prcmu_qos_update_requirement(PRCMU_QOS_APE_OPP,
DEVICE_NAME, 50);
/* Workaround for USB performance issue. */
cancel_delayed_work_sync(&work_usb_workaround);
prcmu_qos_update_requirement(PRCMU_QOS_ARM_OPP,
"usb", 25);
prcmu_release_usb_wakeup_state();
phy_enable_stat = USB_DISABLE;
regulator_disable(musb_vape_supply);
regulator_disable(musb_smps2_supply);
regulator_disable(musb_vintcore_supply);
regulator_set_optimum_mode(musb_vintcore_supply, 0);
/* Set Vintcore12 LDO to 0V to 1.35V */
ret = regulator_set_voltage(musb_vintcore_supply,
0000000, 1350000);
if (ret < 0)
printk(KERN_ERR "Failed to set the Vintcore"
" to 0V to 1.35V,"
//.........这里部分代码省略.........
开发者ID:Krabappel2548,项目名称:u8500_kernel_sources,代码行数:101,代码来源:musb_db8500.c
示例11: mipi_dsi_panel_power
static int mipi_dsi_panel_power(int on)
{
static struct regulator *v_lcm, *v_lcmio, *v_dsivdd;
static bool bPanelPowerOn = false;
int rc;
char *lcm_str = "8921_l11";
char *lcmio_str = "8921_lvs5";
char *dsivdd_str = "8921_l2";
printk(KERN_ERR "[DISP] %s +++\n", __func__);
/* To avoid system crash in shutdown for non-panel case */
if (panel_type == PANEL_ID_NONE)
return -ENODEV;
printk(KERN_INFO "%s: state : %d\n", __func__, on);
if (!dsi_power_on) {
v_lcm = regulator_get(&msm_mipi_dsi1_device.dev,
lcm_str);
if (IS_ERR_OR_NULL(v_lcm)) {
printk(KERN_ERR "could not get %s, rc = %ld\n",
lcm_str, PTR_ERR(v_lcm));
return -ENODEV;
}
v_lcmio = regulator_get(&msm_mipi_dsi1_device.dev,
lcmio_str);
if (IS_ERR_OR_NULL(v_lcmio)) {
printk(KERN_ERR "could not get %s, rc = %ld\n",
lcmio_str, PTR_ERR(v_lcmio));
return -ENODEV;
}
v_dsivdd = regulator_get(&msm_mipi_dsi1_device.dev,
dsivdd_str);
if (IS_ERR_OR_NULL(v_dsivdd)) {
printk(KERN_ERR "could not get %s, rc = %ld\n",
dsivdd_str, PTR_ERR(v_dsivdd));
return -ENODEV;
}
rc = regulator_set_voltage(v_lcm, 3000000, 3000000);
if (rc) {
printk(KERN_ERR "%s#%d: set_voltage %s failed, rc=%d\n", __func__, __LINE__, lcm_str, rc);
return -EINVAL;
}
rc = regulator_set_voltage(v_dsivdd, 1200000, 1200000);
if (rc) {
printk(KERN_ERR "%s#%d: set_voltage %s failed, rc=%d\n", __func__, __LINE__, dsivdd_str, rc);
return -EINVAL;
}
rc = gpio_request(FIGHTER_LCD_RSTz, "LCM_RST_N");
if (rc) {
printk(KERN_ERR "%s:LCM gpio %d request failed, rc=%d\n", __func__, FIGHTER_LCD_RSTz, rc);
return -EINVAL;
}
dsi_power_on = true;
}
if (on) {
printk(KERN_INFO "%s: on\n", __func__);
rc = regulator_set_optimum_mode(v_lcm, 100000);
if (rc < 0) {
printk(KERN_ERR "set_optimum_mode %s failed, rc=%d\n", lcm_str, rc);
return -EINVAL;
}
rc = regulator_set_optimum_mode(v_dsivdd, 100000);
if (rc < 0) {
printk(KERN_ERR "set_optimum_mode %s failed, rc=%d\n", dsivdd_str, rc);
return -EINVAL;
}
if (isOrise()) {
rc = regulator_enable(v_lcmio);
if (rc) {
printk(KERN_ERR "enable regulator %s failed, rc=%d\n", lcmio_str, rc);
return -ENODEV;
}
} else {
rc = regulator_enable(v_lcm);
if (rc) {
printk(KERN_ERR "enable regulator %s failed, rc=%d\n", lcm_str, rc);
return -ENODEV;
}
}
rc = regulator_enable(v_dsivdd);
if (rc) {
printk(KERN_ERR "enable regulator %s failed, rc=%d\n", dsivdd_str, rc);
return -ENODEV;
}
if (isOrise()) {
rc = regulator_enable(v_lcm);
if (rc) {
printk(KERN_ERR "enable regulator %s failed, rc=%d\n", lcm_str, rc);
return -ENODEV;
//.........这里部分代码省略.........
开发者ID:MattCrystal,项目名称:Haunted-X-series,代码行数:101,代码来源:board-fighter-panel.c
示例12: msm_camera_config_vreg
int msm_camera_config_vreg(struct device *dev, struct camera_vreg_t *cam_vreg,
int num_vreg, enum msm_camera_vreg_name_t *vreg_seq,
int num_vreg_seq, struct regulator **reg_ptr, int config)
{
int i = 0, j = 0;
int rc = 0;
struct camera_vreg_t *curr_vreg;
if (num_vreg_seq > num_vreg) {
pr_err("%s:%d vreg sequence invalid\n", __func__, __LINE__);
return -EINVAL;
}
if (!num_vreg_seq)
num_vreg_seq = num_vreg;
if (config) {
for (i = 0; i < num_vreg_seq; i++) {
if (vreg_seq) {
j = vreg_seq[i];
if (j >= num_vreg)
continue;
} else
j = i;
curr_vreg = &cam_vreg[j];
reg_ptr[j] = regulator_get(dev,
curr_vreg->reg_name);
if (IS_ERR(reg_ptr[j])) {
pr_err("%s: %s get failed\n",
__func__,
curr_vreg->reg_name);
reg_ptr[j] = NULL;
goto vreg_get_fail;
}
if (regulator_count_voltages(reg_ptr[j]) > 0) {
rc = regulator_set_voltage(
reg_ptr[j],
curr_vreg->min_voltage,
curr_vreg->max_voltage);
if (rc < 0) {
pr_err("%s: %s set voltage failed\n",
__func__,
curr_vreg->reg_name);
goto vreg_set_voltage_fail;
}
if (curr_vreg->op_mode >= 0) {
rc = regulator_set_optimum_mode(
reg_ptr[j],
curr_vreg->op_mode);
if (rc < 0) {
pr_err(
"%s:%s set optimum mode fail\n",
__func__,
curr_vreg->reg_name);
goto vreg_set_opt_mode_fail;
}
}
}
}
} else {
for (i = num_vreg_seq-1; i >= 0; i--) {
if (vreg_seq) {
j = vreg_seq[i];
if (j >= num_vreg)
continue;
} else
j = i;
curr_vreg = &cam_vreg[j];
if (reg_ptr[j]) {
if (regulator_count_voltages(reg_ptr[j]) > 0) {
if (curr_vreg->op_mode >= 0) {
regulator_set_optimum_mode(
reg_ptr[j], 0);
}
regulator_set_voltage(
reg_ptr[j], 0, curr_vreg->
max_voltage);
}
regulator_put(reg_ptr[j]);
reg_ptr[j] = NULL;
}
}
}
return 0;
vreg_unconfig:
if (regulator_count_voltages(reg_ptr[j]) > 0)
regulator_set_optimum_mode(reg_ptr[j], 0);
vreg_set_opt_mode_fail:
if (regulator_count_voltages(reg_ptr[j]) > 0)
regulator_set_voltage(reg_ptr[j], 0,
curr_vreg->max_voltage);
vreg_set_voltage_fail:
regulator_put(reg_ptr[j]);
reg_ptr[j] = NULL;
vreg_get_fail:
for (i--; i >= 0; i--) {
if (vreg_seq) {
//.........这里部分代码省略.........
开发者ID:BeastOn,项目名称:yu_msm8916,代码行数:101,代码来源:msm_camera_io_util.c
示例13: msm_camera_config_single_vreg
int msm_camera_config_single_vreg(struct device *dev,
struct camera_vreg_t *cam_vreg, struct regulator **reg_ptr, int config)
{
int rc = 0;
const char *vreg_name = NULL;
if (!dev || !cam_vreg || !reg_ptr) {
pr_err("%s: get failed NULL parameter\n", __func__);
goto vreg_get_fail;
}
if (cam_vreg->type == VREG_TYPE_CUSTOM) {
if (cam_vreg->custom_vreg_name == NULL) {
pr_err("%s : can't find sub reg name",
__func__);
goto vreg_get_fail;
}
vreg_name = cam_vreg->custom_vreg_name;
} else {
if (cam_vreg->reg_name == NULL) {
pr_err("%s : can't find reg name", __func__);
goto vreg_get_fail;
}
vreg_name = cam_vreg->reg_name;
}
if (config) {
CDBG("%s enable %s\n", __func__, vreg_name);
*reg_ptr = regulator_get(dev, vreg_name);
if (IS_ERR(*reg_ptr)) {
pr_err("%s: %s get failed\n", __func__, vreg_name);
*reg_ptr = NULL;
goto vreg_get_fail;
}
if (regulator_count_voltages(*reg_ptr) > 0) {
CDBG("%s: voltage min=%d, max=%d\n",
__func__, cam_vreg->min_voltage,
cam_vreg->max_voltage);
rc = regulator_set_voltage(
*reg_ptr, cam_vreg->min_voltage,
cam_vreg->max_voltage);
if (rc < 0) {
pr_err("%s: %s set voltage failed\n",
__func__, vreg_name);
goto vreg_set_voltage_fail;
}
if (cam_vreg->op_mode >= 0) {
rc = regulator_set_optimum_mode(*reg_ptr,
cam_vreg->op_mode);
if (rc < 0) {
pr_err(
"%s: %s set optimum mode failed\n",
__func__, vreg_name);
goto vreg_set_opt_mode_fail;
}
}
}
rc = regulator_enable(*reg_ptr);
if (rc < 0) {
pr_err("%s: %s regulator_enable failed\n", __func__,
vreg_name);
goto vreg_unconfig;
}
} else {
CDBG("%s disable %s\n", __func__, vreg_name);
if (*reg_ptr) {
CDBG("%s disable %s\n", __func__, vreg_name);
regulator_disable(*reg_ptr);
if (regulator_count_voltages(*reg_ptr) > 0) {
if (cam_vreg->op_mode >= 0)
regulator_set_optimum_mode(*reg_ptr, 0);
regulator_set_voltage(
*reg_ptr, 0, cam_vreg->max_voltage);
}
regulator_put(*reg_ptr);
*reg_ptr = NULL;
} else {
pr_err("%s can't disable %s\n", __func__, vreg_name);
}
}
return 0;
vreg_unconfig:
if (regulator_count_voltages(*reg_ptr) > 0)
regulator_set_optimum_mode(*reg_ptr, 0);
vreg_set_opt_mode_fail:
if (regulator_count_voltages(*reg_ptr) > 0)
regulator_set_voltage(*reg_ptr, 0, cam_vreg->max_voltage);
vreg_set_voltage_fail:
regulator_put(*reg_ptr);
*reg_ptr = NULL;
vreg_get_fail:
return -ENODEV;
}
开发者ID:BeastOn,项目名称:yu_msm8916,代码行数:96,代码来源:msm_camera_io_util.c
示例14: pil_mss_loadable_init
static int pil_mss_loadable_init(struct modem_data *drv,
struct platform_device *pdev)
{
struct q6v5_data *q6;
struct pil_desc *q6_desc;
struct resource *res;
struct property *prop;
int ret;
q6 = pil_q6v5_init(pdev);
if (IS_ERR(q6))
return PTR_ERR(q6);
drv->q6 = q6;
drv->xo = q6->xo;
q6_desc = &q6->desc;
q6_desc->owner = THIS_MODULE;
q6_desc->proxy_timeout = PROXY_TIMEOUT_MS;
q6_desc->ops = &pil_msa_mss_ops;
q6->self_auth = of_property_read_bool(pdev->dev.of_node,
"qcom,pil-self-auth");
if (q6->self_auth) {
res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
"rmb_base");
q6->rmb_base = devm_request_and_ioremap(&pdev->dev, res);
if (!q6->rmb_base)
return -ENOMEM;
drv->rmb_base = q6->rmb_base;
q6_desc->ops = &pil_msa_mss_ops_selfauth;
}
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "restart_reg");
if (!res) {
res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
"restart_reg_sec");
q6->restart_reg_sec = true;
}
q6->restart_reg = devm_request_and_ioremap(&pdev->dev, res);
if (!q6->restart_reg)
return -ENOMEM;
q6->vreg = NULL;
prop = of_find_property(pdev->dev.of_node, "vdd_mss-supply", NULL);
if (prop) {
q6->vreg = devm_regulator_get(&pdev->dev, "vdd_mss");
if (IS_ERR(q6->vreg))
return PTR_ERR(q6->vreg);
ret = regulator_set_voltage(q6->vreg, VDD_MSS_UV,
MAX_VDD_MSS_UV);
if (ret)
dev_err(&pdev->dev, "Failed to set vreg voltage.\n");
ret = regulator_set_optimum_mode(q6->vreg, 100000);
if (ret < 0) {
dev_err(&pdev->dev, "Failed to set vreg mode.\n");
return ret;
}
}
q6->vreg_mx = devm_regulator_get(&pdev->dev, "vdd_mx");
if (IS_ERR(q6->vreg_mx))
return PTR_ERR(q6->vreg_mx);
prop = of_find_property(pdev->dev.of_node, "vdd_mx-uV", NULL);
if (!prop) {
dev_err(&pdev->dev, "Missing vdd_mx-uV property\n");
return -EINVAL;
}
res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
"cxrail_bhs_reg");
if (res)
q6->cxrail_bhs = devm_ioremap(&pdev->dev, res->start,
resource_size(res));
q6->ahb_clk = devm_clk_get(&pdev->dev, "iface_clk");
if (IS_ERR(q6->ahb_clk))
return PTR_ERR(q6->ahb_clk);
q6->axi_clk = devm_clk_get(&pdev->dev, "bus_clk");
if (IS_ERR(q6->axi_clk))
return PTR_ERR(q6->axi_clk);
q6->rom_clk = devm_clk_get(&pdev->dev, "mem_clk");
if (IS_ERR(q6->rom_clk))
return PTR_ERR(q6->rom_clk);
/* Optional. */
if (of_property_match_string(pdev->dev.of_node,
"qcom,active-clock-names", "gpll0_mss_clk") >= 0)
q6->gpll0_mss_clk = devm_clk_get(&pdev->dev, "gpll0_mss_clk");
ret = pil_desc_init(q6_desc);
return ret;
}
开发者ID:bju2000,项目名称:kernel_lge_msm8994,代码行数:100,代码来源:pil-q6v5-mss.c
示例15: reg_set_optimum_mode_check
static int reg_set_optimum_mode_check(struct regulator *reg, int load_uA)
{
return (regulator_count_voltages(reg) > 0) ?
regulator_set_optimum_mode(reg, load_uA) : 0;
}
开发者ID:GalaxyTab4,项目名称:android_kernel_samsung_matissewifi.bak,代码行数:5,代码来源:issp_driver_routines.c
示例16: vreg_setup
static int vreg_setup(struct fpc1145_data *fpc1145, const char *name,
bool enable)
{
size_t i;
int rc;
struct regulator *vreg;
struct device *dev = fpc1145->dev;
for (i = 0; i < ARRAY_SIZE(fpc1145->vreg); i++) {
const char *n = vreg_conf[i].name;
if (!strncmp(n, name, strlen(n)))
goto found;
}
dev_err(dev, "Regulator %s not found\n", name);
return -EINVAL;
found:
vreg = fpc1145->vreg[i];
if (enable) {
if (!vreg) {
vreg = regulator_get(dev, name);
if (IS_ERR(vreg)) {
dev_err(dev, "Unable to get %s\n", name);
return PTR_ERR(vreg);
}
}
if (regulator_count_voltages(vreg) > 0) {
rc = regulator_set_voltage(vreg, vreg_conf[i].vmin,
vreg_conf[i].vmax);
if (rc) {
dev_err(dev,
"Unable to set voltage on %s, %d\n",
name, rc);
goto err_exit;
}
}
rc = regulator_set_optimum_mode(vreg, vreg_conf[i].ua_load);
if (rc < 0) {
dev_err(dev, "Unable to set current on %s, %d\n",
name, rc);
goto err_exit;
}
rc = regulator_enable(vreg);
if (rc) {
dev_err(dev, "error enabling %s: %d\n", name, rc);
err_exit:
regulator_put(vreg);
vreg = NULL;
}
fpc1145->vreg[i] = vreg;
} else {
if (vreg) {
if (regulator_is_enabled(vreg)) {
regulator_disable(vreg);
dev_dbg(dev, "disabled %s\n", name);
}
regulator_put(vreg);
fpc1145->vreg[i] = NULL;
}
rc = 0;
}
return rc;
}
开发者ID:MotexT,项目名称:android_kernel_sony_msm8994_kitakami_r2,代码行数:63,代码来源:fpc1145_tee.c
示例17: mipi_dsi_panel_plf_power
static int mipi_dsi_panel_plf_power(int on)
{
int rc = 0;
pr_debug("%s: power_on=%d\n", __func__, on);
rc = mipi_dsi_panel_plf_init();
if (on) {
pr_debug("%s: Power On\n", __func__);
rc = regulator_enable(reg_l11); /* Enable dsi1_avdd */
if (rc) {
pr_err("%s: enable reg_l11 failed, rc=%d\n",
__func__, rc);
goto disable_none;
}
rc = regulator_set_optimum_mode(reg_l29, 1000);
if (rc < 0) {
pr_err("%s: set_optimum_mode l29 failed, rc=%d\n",
__func__, rc);
goto disable_l11;
}
rc = regulator_enable(reg_l29); /* Enable dsi1_vddio */
if (rc) {
pr_err("%s: enable reg_l29 failed, rc=%d\n",
__func__, rc);
goto disable_l11;
}
usleep_range(11000, 12000); /* Spec says > 10 ms */
rc = regulator_set_optimum_mode(reg_l2, 135000);
if (rc < 0) {
pr_err("%s: set_optimum_mode l2 failed, rc=%d\n",
__func__, rc);
goto disable_l29_l11;
}
rc = regulator_enable(reg_l2); /* Enable dsi-vdda */
if (rc) {
pr_err("%s: enable l2 failed, rc=%d\n", __func__, rc);
goto disable_l29_l11;
}
mipi_dsi_panel_plf_reset(0); /* Reset LOW */
usleep_range(6000, 7000); /* Spec says > 5 ms */
mipi_dsi_panel_plf_reset(1); /* Reset HIGH */
usleep_range(11000, 12000); /* Spec says > 10 ms */
/* Enable VSP/VSN */
gpio_set_value_cansleep(lcd_dcdc_en_gpio, 1);
usleep_range(11000, 12000); /* Spec says > 10 ms */
} else {
pr_debug("%s: Power Off\n", __func__);
/* Disable VSP/VSN */
gpio_set_value_cansleep(lcd_dcdc_en_gpio, 0);
msleep(20); /* Spec says > 20 ms) */
gpio_set_value_cansleep(lcd_reset_gpio, 0); /* Pull RESET Low */
rc = regulator_disable(reg_l2); /* Disable dsi-vdda */
if (rc)
pr_err("%s: disable l2 failed, rc=%d\n", __func__, rc);
rc = regulator_disable(reg_l29); /* Disable dsi1_vddio */
if (rc)
pr_err("%s: disable l29 failed, rc=%d\n", __func__, rc);
rc = regulator_disable(reg_l11); /* Disable dsi1_avdd */
if (rc)
pr_err("%s: disable l11 failed, rc=%d\n",
__func__, rc);
}
return 0;
disable_l29_l11:
rc = regulator_disable(reg_l29);
if (rc)
pr_err("%s: disable l29 failed, rc=%d\n", __func__, rc);
disable_l11:
rc = regulator_disable(reg_l11);
if (rc)
pr_err("disable reg_l11 failed, rc=%d\n", rc);
disable_none:
return rc;
}
开发者ID:BrateloSlava,项目名称:test-sez-cm-kernel,代码行数:81,代码来源:board-sony_dogo-display.c
示例18: update_vdd
/* Update voltage level given the current votes. */
static int update_vdd(struct clk_vdd_class *vdd_class)
{
int level, rc = 0, i, ignore;
struct regulator **r = vdd_class->regulator;
int *uv = vdd_class->vdd_uv;
int *ua = vdd_class->vdd_ua;
int n_reg = vdd_class->num_regulators;
int cur_lvl = vdd_class->cur_level;
int max_lvl = vdd_class->num_levels - 1;
int cur_base = cur_lvl * n_reg;
int new_base;
/* aggregate votes */
for (level = max_lvl; level > 0; level--)
if (vdd_class->level_votes[level])
break;
if (level == cur_lvl)
return 0;
max_lvl = max_lvl * n_reg;
new_base = level * n_reg;
for (i = 0; i < vdd_class->num_regulators; i++) {
rc = regulator_set_voltage(r[i], uv[new_base + i],
uv[max_lvl + i]);
if (rc)
goto set_voltage_fail;
if (ua) {
rc = regulator_set_optimum_mode(r[i], ua[new_base + i]);
rc = rc > 0 ? 0 : rc;
if (rc)
goto set_mode_fail;
}
if (cur_lvl == 0 || cur_lvl == vdd_class->num_levels)
rc = regulator_enable(r[i]);
else if (level == 0)
rc = regulator_disable(r[i]);
if (rc)
goto enable_disable_fail;
}
if (vdd_class->set_vdd && !vdd_class->num_regulators)
rc = vdd_class->set_vdd(vdd_class, level);
if (!rc)
vdd_class->cur_level = level;
return rc;
enable_disable_fail:
/*
* set_optimum_mode could use voltage to derive mode. Restore
* previous voltage setting for r[i] first.
*/
if (ua) {
regulator_set_voltage(r[i], uv[cur_base + i], uv[max_lvl + i]);
regulator_set_optimum_mode(r[i], ua[cur_base + i]);
}
set_mode_fail:
regulator_set_voltage(r[i], uv[cur_base + i], uv[max_lvl + i]);
set_voltage_fail:
for (i--; i >= 0; i--) {
regulator_set_voltage(r[i], uv[cur_base + i], uv[max_lvl + i]);
if (ua)
regulator_set_optimum_mode(r[i], ua[cur_base + i]);
if (cur_lvl == 0 || cur_lvl == vdd_class->num_levels)
regulator_disable(r[i]);
else if (level == 0)
ignore = regulator_enable(r[i]);
}
return rc;
}
开发者ID:davidmueller13,项目名称:davidskernel_lt03lte_tw_5.1.1,代码行数:75,代码来源:clock.c
示例19: hsic_hub_clear_bits
/* CONFIG_N bit in SP_ILOCK register has to be cleared for new
* values in registers to be effective after writing to
* other registers.
*/
hsic_hub_clear_bits(client, SMSC3503_SP_ILOCK, CONFIG_N);
return 0;
}
static int i2c_hsic_hub_remove(struct i2c_client *client)
{
return 0;
}
static const struct i2c_device_id hsic_hub_id[] = {
{"i2c_hsic_hub", 0},
{}
};
MODULE_DEVICE_TABLE(i2c, hsichub_id);
static struct i2c_driver hsic_hub_driver = {
.driver = {
.name = "i2c_hsic_hub",
},
.probe = i2c_hsic_hub_probe,
.remove = i2c_hsic_hub_remove,
.id_table = hsic_hub_id,
};
#define HSIC_HUB_VDD_VOL_MIN 1650000 /* uV */
#define HSIC_HUB_VDD_VOL_MAX 1950000 /* uV */
#define HSIC_HUB_VDD_LOAD 36000 /* uA */
static int __devinit smsc_hub_probe(struct platform_device *pdev)
{
int ret = 0;
const struct smsc_hub_platform_data *pdata;
struct i2c_adapter *i2c_adap;
struct i2c_board_info i2c_info;
if (!pdev->dev.platform_data) {
dev_err(&pdev->dev, "No platform data\n");
return -ENODEV;
}
pdata = pdev->dev.platform_data;
if (!pdata->hub_reset)
return -EINVAL;
smsc_hub = kzalloc(sizeof(*smsc_hub), GFP_KERNEL);
if (!smsc_hub)
return -ENOMEM;
smsc_hub->hsic_hub_reg = regulator_get(&pdev->dev, "EXT_HUB_VDDIO");
if (IS_ERR(smsc_hub->hsic_hub_reg)) {
dev_err(&pdev->dev, "unable to get ext hub vddcx\n");
ret = PTR_ERR(smsc_hub->hsic_hub_reg);
goto free_mem;
}
ret = gpio_request(pdata->hub_reset, "HSIC_HUB_RESET_GPIO");
if (ret < 0) {
dev_err(&pdev->dev, "gpio request failed for GPIO%d\n",
pdata->hub_reset);
goto gpio_req_fail;
}
ret = regulator_set_voltage(smsc_hub->hsic_hub_reg,
HSIC_HUB_VDD_VOL_MIN,
HSIC_HUB_VDD_VOL_MAX);
if (ret) {
dev_err(&pdev->dev, "unable to set the voltage"
"for hsic hub reg\n");
goto reg_set_voltage_fail;
}
ret = regulator_set_optimum_mode(smsc_hub->hsic_hub_reg,
HSIC_HUB_VDD_LOAD);
if (ret < 0) {
dev_err(&pdev->dev, "Unable to set optimum mode of regulator:"
"VDDCX\n");
goto reg_optimum_mode_fail;
}
ret = regulator_enable(smsc_hub->hsic_hub_reg);
if (ret) {
dev_err(&pdev->dev, "unable to enable ext hub vddcx\n");
goto reg_enable_fail;
}
smsc_hub->xo_handle = msm_xo_get(MSM_XO_TCXO_D1, "hsic_hub");
if (IS_ERR(smsc_hub->xo_handle)) {
dev_err(&pdev->dev, "not able to get the handle"
"for TCXO D1 buffer\n");
goto disable_regulator;
}
ret = msm_xo_mode_vote(smsc_hub->xo_handle, MSM_XO_MODE_ON);
if (ret) {
dev_err(&pdev->dev, "failed to vote for TCXO"
"D1 buffer\n");
//.........这里部分代码省略.........
开发者ID:thedancomplex,项目名称:BMW-OpenSource,代码行数:101,代码来源:smsc_hub.c
示例20: msm_camera_config_vreg
int msm_camera_config_vreg(struct device *dev, struct camera_vreg_t *cam_vreg,
int num_vreg, struct regulator **reg_ptr, int config)
{
int i = 0;
int rc = 0;
struct camera_vreg_t *curr_vreg;
if (config) {
for (i = 0; i < num_vreg; i++) {
curr_vreg = &cam_vreg[i];
reg_ptr[i] = regulator_get(dev,
curr_vreg->reg_name);
if (IS_ERR(reg_ptr[i])) {
pr_err("%s: %s get failed\n",
__func__,
curr_vreg->reg_name);
reg_ptr[i] = NULL;
goto vreg_get_fail;
}
if (curr_vreg->type == REG_LDO) {
rc = regulator_set_voltage(
reg_ptr[i],
curr_vreg->min_voltage,
curr_vreg->max_voltage);
if (rc < 0) {
pr_err("%s: %s set voltage failed\n",
__func__,
curr_vreg->reg_name);
goto vreg_set_voltage_fail;
}
if (curr_vreg->op_mode >= 0) {
rc = regulator_set_optimum_mode(
reg_ptr[i],
curr_vreg->op_mode);
if (rc < 0) {
pr_err(
"%s: %s set optimum mode failed\n",
__func__,
curr_vreg->reg_name);
goto vreg_set_opt_mode_fail;
}
}
}
}
} else {
for (i = num_vreg-1; i >= 0; i--) {
curr_vreg = &cam_vreg[i];
if (reg_ptr[i]) {
if (curr_vreg->type == REG_LDO) {
if (curr_vreg->op_mode >= 0) {
regulator_set_optimum_mode(
reg_ptr[i], 0);
}
regulator_set_voltage(
reg_ptr[i], 0, curr_vreg->
max_voltage);
}
regulator_put(reg_ptr[i]);
reg_ptr[i] = NULL;
}
}
}
return 0;
vreg_unconfig:
if (curr_vreg->type == REG_LDO)
regulator_set_optimum_mode(reg_ptr[i], 0);
vreg_set_opt_mode_fail:
if (curr_vreg->type == REG_LDO)
regulator_set_voltage(reg_ptr[i], 0,
curr_vreg->max_voltage);
vreg_set_voltage_fail:
regulator_put(reg_ptr[i]);
reg_ptr[i] = NULL;
vreg_get_fail:
for (i--; i >= 0; i--) {
curr_vreg = &cam_vreg[i];
goto vreg_unconfig;
}
return -ENODEV;
}
开发者ID:JonasCardoso,项目名称:SkernelPlus-StockJB,代码行数:83,代码来源:msm_camera_io_util.c
注:本文中的regulator_set_optimum_mode函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论