本文整理汇总了C++中regulator_disable函数的典型用法代码示例。如果您正苦于以下问题:C++ regulator_disable函数的具体用法?C++ regulator_disable怎么用?C++ regulator_disable使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了regulator_disable函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: s3cfb_probe
//.........这里部分代码省略.........
s3cfb_set_global_interrupt(fbdev, 1);
s3cfb_init_global(fbdev);
if (s3cfb_alloc_framebuffer(fbdev)) {
ret = -ENOMEM;
goto err_alloc;
}
if (s3cfb_register_framebuffer(fbdev)) {
ret = -EINVAL;
goto err_register;
}
s3cfb_set_clock(fbdev);
s3cfb_set_window(fbdev, pdata->default_win, 1);
s3cfb_display_on(fbdev);
fbdev->irq = platform_get_irq(pdev, 0);
if (request_irq(fbdev->irq, s3cfb_irq_frame, IRQF_SHARED,
pdev->name, fbdev)) {
dev_err(fbdev->dev, "request_irq failed\n");
ret = -EINVAL;
goto err_irq;
}
#ifdef CONFIG_FB_S3C_LCD_INIT
#if defined(CONFIG_FB_S3C_TL2796)
if (pdata->backlight_on)
pdata->backlight_on(pdev);
#endif
if (!bootloaderfb && pdata->reset_lcd)
pdata->reset_lcd(pdev);
#endif
#ifdef CONFIG_HAS_EARLYSUSPEND
fbdev->early_suspend.suspend = s3cfb_early_suspend;
fbdev->early_suspend.resume = s3cfb_late_resume;
fbdev->early_suspend.level = EARLY_SUSPEND_LEVEL_DISABLE_FB;
register_early_suspend(&fbdev->early_suspend);
#endif
fbdev->vsync_thread = kthread_run(s3cfb_wait_for_vsync_thread,
fbdev, "s3cfb-vsync");
if (fbdev->vsync_thread == ERR_PTR(-ENOMEM)) {
dev_err(fbdev->dev, "failed to run vsync thread\n");
fbdev->vsync_thread = NULL;
}
ret = device_create_file(&(pdev->dev), &dev_attr_win_power);
if (ret < 0)
dev_err(fbdev->dev, "failed to add sysfs entries\n");
dev_info(fbdev->dev, "registered successfully\n");
return 0;
err_irq:
s3cfb_display_off(fbdev);
s3cfb_set_window(fbdev, pdata->default_win, 0);
for (i = pdata->default_win;
i < pdata->nr_wins + pdata->default_win; i++) {
j = i % pdata->nr_wins;
unregister_framebuffer(fbdev->fb[j]);
}
err_register:
for (i = 0; i < pdata->nr_wins; i++) {
if (i == pdata->default_win)
s3cfb_unmap_default_video_memory(fbdev->fb[i]);
framebuffer_release(fbdev->fb[i]);
}
kfree(fbdev->fb);
err_alloc:
iounmap(fbdev->regs);
err_mem:
release_mem_region(res->start,
res->end - res->start + 1);
err_io:
pdata->clk_off(pdev, &fbdev->clock);
err_pdata:
#ifndef CONFIG_MACH_MID
regulator_disable(fbdev->vlcd);
err_vlcd:
regulator_disable(fbdev->vcc_lcd);
err_vcc_lcd:
#endif
regulator_disable(fbdev->regulator);
err_regulator:
kfree(fbdev);
err_global:
return ret;
}
示例2: imx135_power_ctrl
static int imx135_power_ctrl(struct v4l2_subdev *sd, int flag)
{
struct i2c_client *client = v4l2_get_subdevdata(sd);
int ret = 0;
if (flag) {
if (is_ctp()) {
if (!camera_vemmc1_on) {
camera_vemmc1_on = 1;
ret = regulator_enable(vemmc1_reg);
if (ret) {
dev_err(&client->dev,
"Failed to enable regulator vemmc1\n");
return ret;
}
}
if (vprog1_reg && !camera_vprog1_on) {
camera_vprog1_on = 1;
ret = regulator_enable(vprog1_reg);
if (ret) {
dev_err(&client->dev,
"Failed to enable regulator vprog1\n");
return ret;
}
}
if (!is_victoriabay()) {
if (camera_power < 0) {
ret = camera_sensor_gpio(-1,
GP_CAMERA_1_POWER_DOWN,
GPIOF_DIR_OUT, 1);
if (ret < 0)
return ret;
camera_power = ret;
}
gpio_set_value(camera_power, 1);
}
/* min 250us -Initializing time of silicon */
usleep_range(250, 300);
} else {
if (!camera_vprog1_on) {
ret = regulator_enable(vprog1_reg);
if (!ret) {
/* imx1x5 VDIG rise to XCLR release */
usleep_range(1000, 1200);
camera_vprog1_on = 1;
}
return ret;
}
}
} else {
if (is_ctp()) {
if (camera_vemmc1_on) {
camera_vemmc1_on = 0;
ret = regulator_disable(vemmc1_reg);
if (ret) {
dev_err(&client->dev,
"Failed to disable regulator vemmc1\n");
return ret;
}
}
if (vprog1_reg && camera_vprog1_on) {
camera_vprog1_on = 0;
ret = regulator_disable(vprog1_reg);
if (ret) {
dev_err(&client->dev,
"Failed to disable regulator vprog1\n");
return ret;
}
}
} else {
if (camera_vprog1_on) {
ret = regulator_disable(vprog1_reg);
if (!ret)
camera_vprog1_on = 0;
return ret;
}
}
}
return 0;
}
示例3: mipi_dsi_panel_power
//.........这里部分代码省略.........
gpio36 = PM8921_GPIO_PM_TO_SYS(V_LCM_N5V_EN);
rc = gpio_request(gpio36, "lcd_5v-");
if (rc) {
pr_err("request lcd_5v- failed, rc=%d\n", rc);
return -ENODEV;
}
gpio37 = PM8921_GPIO_PM_TO_SYS(V_LCM_P5V_EN);
rc = gpio_request(gpio37, "lcd_5v+");
if (rc) {
pr_err("request lcd_5v+ failed, rc=%d\n", rc);
return -ENODEV;
}
gpio_tlmm_config(GPIO_CFG(LCD_RST, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
dsi_power_on = true;
}
if (on) {
if (!first_init) {
rc = regulator_enable(reg_lvs5);
if (rc) {
pr_err("enable lvs5 failed, rc=%d\n", rc);
return -ENODEV;
}
msleep(200);
gpio_set_value_cansleep(gpio37, 1);
msleep(10);
gpio_set_value_cansleep(gpio36, 1);
rc = regulator_set_optimum_mode(reg_l2, 100000);
if (rc < 0) {
pr_err("set_optimum_mode l2 failed, rc=%d\n", rc);
return -EINVAL;
}
rc = regulator_enable(reg_l2);
if (rc) {
pr_err("enable l2 failed, rc=%d\n", rc);
return -ENODEV;
}
msm_xo_mode_vote(wa_xo, MSM_XO_MODE_ON);
gpio_set_value(LCD_RST, 0);
msleep(10);
gpio_set_value(LCD_RST, 1);
msm_xo_mode_vote(wa_xo, MSM_XO_MODE_OFF);
} else {
rc = regulator_enable(reg_lvs5);
if (rc) {
pr_err("enable lvs5 failed, rc=%d\n", rc);
return -ENODEV;
}
rc = regulator_set_optimum_mode(reg_l2, 100000);
if (rc < 0) {
pr_err("set_optimum_mode l2 failed, rc=%d\n", rc);
return -EINVAL;
}
rc = regulator_enable(reg_l2);
if (rc) {
pr_err("enable l2 failed, rc=%d\n", rc);
return -ENODEV;
}
msm_xo_mode_vote(wa_xo, MSM_XO_MODE_ON);
msleep(10);
msm_xo_mode_vote(wa_xo, MSM_XO_MODE_OFF);
}
} else {
if (system_rev == XB) {
gpio_tlmm_config(GPIO_CFG(MBAT_IN_XA_XB, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
gpio_set_value(MBAT_IN_XA_XB, 0);
} else if (system_rev >= XC) {
gpio_tlmm_config(GPIO_CFG(BL_HW_EN_XC_XD, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
gpio_set_value(BL_HW_EN_XC_XD, 0);
}
gpio_set_value(LCD_RST, 0);
msleep(10);
rc = regulator_disable(reg_l2);
if (rc) {
pr_err("disable reg_l2 failed, rc=%d\n", rc);
return -ENODEV;
}
gpio_set_value_cansleep(gpio36, 0);
msleep(10);
gpio_set_value_cansleep(gpio37, 0);
msleep(100);
rc = regulator_disable(reg_lvs5);
if (rc) {
pr_err("disable reg_lvs5 failed, rc=%d\n", rc);
return -ENODEV;
}
}
return 0;
}
示例4: t4k35_180_power_ctrl
static int t4k35_180_power_ctrl(struct v4l2_subdev *sd, int flag)
{
int reg_err;
int ret = 0;
printk("%s: ++\n",__func__);
if (camera_reset < 0) {
ret = camera_sensor_gpio(-1, GP_CAMERA_0_RESET, GPIOF_DIR_OUT, 0);
if (ret < 0){
printk("camera_reset not available.\n");
return ret;
}
camera_reset = ret;
}
printk("<< camera_reset:%d, flag:%d\n", camera_reset, flag);
if (flag) {
if (camera_reset >= 0){
gpio_set_value(camera_reset, 0);
printk("<<< camera_reset = 0\n");
}
//turn on VCM power 2.85V
if (!camera_vemmc1_on) {
camera_vemmc1_on = 1;
reg_err = regulator_enable(vemmc1_reg);
if (reg_err) {
printk(KERN_ALERT "Failed to enable regulator vemmc1\n");
return reg_err;
}
printk("<<< VCM 2.85V = 1\n");
}
//turn on power 1.8V and 2.8V
if (!camera_vprog1_on) {
camera_vprog1_on = 1;
reg_err = regulator_enable(vprog1_reg);
if (reg_err) {
printk(KERN_ALERT "Failed to enable regulator vprog1\n");
return reg_err;
}
printk("<<< 1.8V and 2.8V = 1\n");
}
//turn on power 1.2V
if (!camera_vprog2_on) {
camera_vprog2_on = 1;
reg_err = regulator_enable(vprog2_reg);
if (reg_err) {
printk(KERN_ALERT "Failed to enable regulator vprog2\n");
return reg_err;
}
printk("<<< 1.2V = 1\n");
}
usleep_range(2000, 2100); //wait vprog1 and vprog2 from enable to 90% (max:2000us)
} else {
if (camera_reset >= 0){
gpio_free(camera_reset);
camera_reset = -1;
}
//turn off power 1.2V
if (camera_vprog2_on) {
camera_vprog2_on = 0;
reg_err = regulator_disable(vprog2_reg);
if (reg_err) {
printk(KERN_ALERT "Failed to disable regulator vprog2\n");
return reg_err;
}
printk("<<< 1.2V = 0\n");
}
//turn off power 1.8V and 2.8V
if (camera_vprog1_on) {
camera_vprog1_on = 0;
reg_err = regulator_disable(vprog1_reg);
if (reg_err) {
printk(KERN_ALERT "Failed to disable regulator vprog1\n");
return reg_err;
}
printk("<<< 1.8V and 2.8V = 0\n");
}
//turn off VCM power 2.85V
if (camera_vemmc1_on) {
camera_vemmc1_on = 0;
reg_err = regulator_disable(vemmc1_reg);
if (reg_err) {
printk(KERN_ALERT "Failed to disable regulator vemmc1\n");
return reg_err;
}
printk("<<< VCM 2.85V = 0\n");
}
}
return 0;
}
示例5: msm_mdss_init
int msm_mdss_init(struct drm_device *dev)
{
struct platform_device *pdev = to_platform_device(dev->dev);
struct msm_drm_private *priv = dev->dev_private;
struct msm_mdss *mdss;
int ret;
DBG("");
if (!of_device_is_compatible(dev->dev->of_node, "qcom,mdss"))
return 0;
mdss = devm_kzalloc(dev->dev, sizeof(*mdss), GFP_KERNEL);
if (!mdss) {
ret = -ENOMEM;
goto fail;
}
mdss->dev = dev;
mdss->mmio = msm_ioremap(pdev, "mdss_phys", "MDSS");
if (IS_ERR(mdss->mmio)) {
ret = PTR_ERR(mdss->mmio);
goto fail;
}
mdss->vbif = msm_ioremap(pdev, "vbif_phys", "VBIF");
if (IS_ERR(mdss->vbif)) {
ret = PTR_ERR(mdss->vbif);
goto fail;
}
/* Regulator to enable GDSCs in downstream kernels */
mdss->vdd = devm_regulator_get(dev->dev, "vdd");
if (IS_ERR(mdss->vdd)) {
ret = PTR_ERR(mdss->vdd);
goto fail;
}
ret = regulator_enable(mdss->vdd);
if (ret) {
dev_err(dev->dev, "failed to enable regulator vdd: %d\n",
ret);
goto fail;
}
ret = devm_request_irq(dev->dev, platform_get_irq(pdev, 0),
mdss_irq, 0, "mdss_isr", mdss);
if (ret) {
dev_err(dev->dev, "failed to init irq: %d\n", ret);
goto fail_irq;
}
ret = mdss_irq_domain_init(mdss);
if (ret) {
dev_err(dev->dev, "failed to init sub-block irqs: %d\n", ret);
goto fail_irq;
}
priv->mdss = mdss;
pm_runtime_enable(dev->dev);
/*
* TODO: This is needed as the MDSS GDSC is only tied to MDSS's power
* domain. Remove this once runtime PM is adapted for all the devices.
*/
pm_runtime_get_sync(dev->dev);
return 0;
fail_irq:
regulator_disable(mdss->vdd);
fail:
return ret;
}
示例6: omapdss_dpi_display_enable
int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
{
int r;
if (cpu_is_omap44xx() && dssdev->channel != OMAP_DSS_CHANNEL_LCD2) {
/* Only LCD2 channel is connected to DPI on OMAP4 */
return -EINVAL;
}
r = omap_dss_start_device(dssdev);
if (r) {
DSSERR("failed to start device\n");
return r;
}
if (cpu_is_omap34xx() && !cpu_is_omap3630()) {
r = regulator_enable(dpi.vdds_dsi_reg);
if (r)
goto err0;
}
/* turn on clock(s) */
dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
if (!cpu_is_omap44xx())
dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
dss_mainclk_state_enable();
dpi_basic_init(dssdev);
#ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
r = dsi_pll_init(dssdev, 0, 1);
if (r)
goto err1;
#endif /* CONFIG_OMAP2_DSS_USE_DSI_PLL */
r = dpi_set_mode(dssdev);
if (r)
goto err2;
mdelay(2);
if (dssdev->manager) {
if (cpu_is_omap44xx())
dpi_start_auto_update(dssdev);
dssdev->manager->enable(dssdev->manager);
}
return 0;
err2:
#ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
dsi_pll_uninit(dssdev->channel == OMAP_DSS_CHANNEL_LCD ? DSI1 : DSI2);
err1:
#endif
dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
if (!cpu_is_omap44xx())
dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
dss_mainclk_state_disable(true);
if (cpu_is_omap34xx() && !cpu_is_omap3630())
regulator_disable(dpi.vdds_dsi_reg);
err0:
omap_dss_stop_device(dssdev);
return r;
}
示例7: px3315_probe
//.........这里部分代码省略.........
printk("%s\n", __func__);
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE))
return -EIO;
data = kzalloc(sizeof(struct px3315_data), GFP_KERNEL);
if (!data)
return -ENOMEM;
px3315_power.regulator_vdd = NULL;
px3315_power.regulator_vio = NULL;
px3315_power.regulator_vdd = regulator_get(&client->dev, "vdd-proxi");
if (IS_ERR(px3315_power.regulator_vdd)) {
ret = PTR_ERR(px3315_power.regulator_vdd);
pr_err("%s: failed to get vdd-proxi regulator %d\n", __func__, ret);
goto err_setup_regulator;
}
px3315_power.regulator_vio = regulator_get(&client->dev, "vio_proxi");
if (IS_ERR(px3315_power.regulator_vio)) {
ret = PTR_ERR(px3315_power.regulator_vio);
pr_err("%s: failed to get vio_proxi regulator %d\n", __func__, ret);
goto err_setup_regulator;
}
regulator_enable(px3315_power.regulator_vdd);
mdelay(15);
regulator_enable(px3315_power.regulator_vio);
dev_set_name(&client->dev, client->name);
data->gpio = pdata->ps_vout_gpio;
data->client = client;
data->irq = client->irq;
i2c_set_clientdata(client, data);
mutex_init(&data->lock);
/* INT Settings */
data->irq = gpio_to_irq(data->gpio);
if (data->irq < 0) {
err = data->irq;
pr_err("%s: Failed to convert GPIO %u to IRQ [errno=%d]",
__func__, data->gpio, err);
goto exit_kfree;
}
err = request_threaded_irq(data->irq, NULL, px3315_irq,
IRQF_TRIGGER_FALLING,
"px3315", data);
if (err) {
pr_err("%s: request_irq failed for taos\n", __func__);
goto exit_kfree;
}
disable_irq(data->irq);
INIT_WORK(&data->work_ptime, px3315_work_func);
/* initialize the PX3315 chip */
err = px3315_init_client(client);
if (err)
goto exit_kfree;
/* create input device */
err = px3315_input_init(data);
if (err)
goto exit_kfree;
/* register sysfs hooks */
err = sysfs_create_group(&data->input->dev.kobj, &px3315_attr_group);
if (err)
goto exit_input;
error = sensors_register(proximity_device, data, proximity_attrs,
"proximity_sensor");
if (error < 0) {
pr_err("%s: could not register proximity sensor device(%d).\n",
__func__, error);
goto exit_input;
}
dev_info(&client->dev, "px3315 driver version %s enabled\n", DRIVER_VERSION);
return 0;
exit_input:
px3315_input_fini(data);
exit_kfree:
kfree(data);
err_setup_regulator:
if (px3315_power.regulator_vdd) {
regulator_disable(px3315_power.regulator_vdd);
regulator_put(px3315_power.regulator_vdd);
}
if (px3315_power.regulator_vio) {
regulator_disable(px3315_power.regulator_vio);
regulator_put(px3315_power.regulator_vio);
}
return err;
}
示例8: prox_power_set
/* proximity */
static int prox_power_set(unsigned char onoff)
{
/* just return 0, later I'll fix it */
static bool init_done = 0;
int ret = 0;
/* need to be fixed - for vreg using SUB PMIC */
struct regulator *ldo5 = NULL;
ldo5 = regulator_get(NULL, "RT8053_LDO5");
if (ldo5 == NULL)
pr_err(
"%s: regulator_get(ldo5) failed\n",
__func__);
printk(KERN_INFO "[Proximity] %s() : Power %s\n",
__func__, onoff ? "On" : "Off");
if (init_done == 0 && onoff) {
if (onoff) {
printk(KERN_INFO "LDO5 vreg set.\n");
ret = regulator_set_voltage(ldo5, 2800000, 2800000);
if (ret < 0)
pr_err(
"%s: regulator_set_voltage(ldo5) failed\n",
__func__);
ret = regulator_enable(ldo5);
if (ret < 0)
pr_err(
"%s: regulator_enable(ldo5) failed\n",
__func__);
init_done = 1;
} else {
ret = regulator_disable(ldo5);
if (ret < 0)
pr_err(
"%s: regulator_disable(ldo5) failed\n",
__func__);
}
}
return ret;
/* struct vreg *temp_vreg = vreg_get(0, "");
printk(
"[Proximity] %s() : Power %s\n",__FUNCTION__, onoff ? "On" : "Off");
if (init_done == 0 && onoff) {
if (onoff) {
vreg_set_level(temp_vreg, 2800);
vreg_enable(temp_vreg);
init_done = 1;
} else {
vreg_disable(temp_vreg);
}
}
return ret;
*/
return ret;
}
示例9: vos_chip_power_qrf8615
//.........这里部分代码省略.........
rc = regulator_set_voltage(vregs_qwlan[i],
vregs_qwlan_val_min[i],
vregs_qwlan_val_max[i]);
if (rc) {
pr_err("regulator_set_voltage(%s) failed\n",
vregs_qwlan_name[i]);
goto vreg_fail;
}
}
/* vote for pin control (if needed) */
if (vregs_is_pin_controlled[i]) {
vregs_pc_qwlan[i] = regulator_get(NULL,
vregs_qwlan_pc_name[i]);
if (IS_ERR(vregs_pc_qwlan[i])) {
pr_err("regulator get of %s failed "
"(%ld)\n",
vregs_qwlan_pc_name[i],
PTR_ERR(vregs_pc_qwlan[i]));
rc = PTR_ERR(vregs_pc_qwlan[i]);
goto vreg_fail;
}
}
}
if (on && !wlan_on) {
rc = regulator_enable(vregs_qwlan[i]);
if (rc < 0) {
pr_err("vreg %s enable failed (%d)\n",
vregs_qwlan_name[i], rc);
goto vreg_fail;
}
if (vregs_is_pin_controlled[i]) {
rc = regulator_enable(vregs_pc_qwlan[i]);
if (rc < 0) {
pr_err("vreg %s enable failed (%d)\n",
vregs_qwlan_pc_name[i], rc);
goto vreg_fail;
}
}
} else if (!on && wlan_on) {
if (vregs_is_pin_controlled[i]) {
rc = regulator_disable(vregs_pc_qwlan[i]);
if (rc < 0) {
pr_err("vreg %s disable failed (%d)\n",
vregs_qwlan_pc_name[i], rc);
goto vreg_fail;
}
}
rc = regulator_disable(vregs_qwlan[i]);
if (rc < 0) {
pr_err("vreg %s disable failed (%d)\n",
vregs_qwlan_name[i], rc);
goto vreg_fail;
}
}
}
if (on) {
gpio_set_value_cansleep(wlan_gpio_deep_sleep, WLAN_RESET_OUT);
wlan_on = true;
}
else
wlan_on = false;
return 0;
vreg_fail:
regulator_put(vregs_qwlan[i]);
if (vregs_is_pin_controlled[i])
regulator_put(vregs_pc_qwlan[i]);
vreg_get_fail:
i--;
while (i >= 0) {
ret = !on ? regulator_enable(vregs_qwlan[i]) :
regulator_disable(vregs_qwlan[i]);
if (ret < 0) {
pr_err("vreg %s %s failed (%d) in err path\n",
vregs_qwlan_name[i],
!on ? "enable" : "disable", ret);
}
if (vregs_is_pin_controlled[i]) {
ret = !on ? regulator_enable(vregs_pc_qwlan[i]) :
regulator_disable(vregs_pc_qwlan[i]);
if (ret < 0) {
pr_err("vreg %s %s failed (%d) in err path\n",
vregs_qwlan_pc_name[i],
!on ? "enable" : "disable", ret);
}
}
regulator_put(vregs_qwlan[i]);
if (vregs_is_pin_controlled[i])
regulator_put(vregs_pc_qwlan[i]);
i--;
}
if (!on)
goto fail;
fail_xo_mode_vote:
msm_xo_put(wlan_clock);
fail_gpio_dir_out:
gpio_free(wlan_gpio_deep_sleep);
fail:
return rc;
}
示例10: mop500_prox_deactivate
static void mop500_prox_deactivate(struct device *dev)
{
regulator_disable(prox_regulator);
regulator_put(prox_regulator);
}
示例11: wl1251_spi_probe
static int wl1251_spi_probe(struct spi_device *spi)
{
struct wl1251_platform_data *pdata = dev_get_platdata(&spi->dev);
struct device_node *np = spi->dev.of_node;
struct ieee80211_hw *hw;
struct wl1251 *wl;
int ret;
if (!np && !pdata) {
wl1251_error("no platform data");
return -ENODEV;
}
hw = wl1251_alloc_hw();
if (IS_ERR(hw))
return PTR_ERR(hw);
wl = hw->priv;
SET_IEEE80211_DEV(hw, &spi->dev);
spi_set_drvdata(spi, wl);
wl->if_priv = spi;
wl->if_ops = &wl1251_spi_ops;
/* This is the only SPI value that we need to set here, the rest
* comes from the board-peripherals file
*/
spi->bits_per_word = 32;
ret = spi_setup(spi);
if (ret < 0) {
wl1251_error("spi_setup failed");
goto out_free;
}
if (np) {
wl->use_eeprom = of_property_read_bool(np, "ti,wl1251-has-eeprom");
wl->power_gpio = of_get_named_gpio(np, "ti,power-gpio", 0);
} else if (pdata) {
wl->power_gpio = pdata->power_gpio;
wl->use_eeprom = pdata->use_eeprom;
}
if (wl->power_gpio == -EPROBE_DEFER) {
ret = -EPROBE_DEFER;
goto out_free;
}
if (gpio_is_valid(wl->power_gpio)) {
ret = devm_gpio_request_one(&spi->dev, wl->power_gpio,
GPIOF_OUT_INIT_LOW, "wl1251 power");
if (ret) {
wl1251_error("Failed to request gpio: %d\n", ret);
goto out_free;
}
} else {
wl1251_error("set power gpio missing in platform data");
ret = -ENODEV;
goto out_free;
}
wl->irq = spi->irq;
if (wl->irq < 0) {
wl1251_error("irq missing in platform data");
ret = -ENODEV;
goto out_free;
}
irq_set_status_flags(wl->irq, IRQ_NOAUTOEN);
ret = devm_request_irq(&spi->dev, wl->irq, wl1251_irq, 0,
DRIVER_NAME, wl);
if (ret < 0) {
wl1251_error("request_irq() failed: %d", ret);
goto out_free;
}
irq_set_irq_type(wl->irq, IRQ_TYPE_EDGE_RISING);
wl->vio = devm_regulator_get(&spi->dev, "vio");
if (IS_ERR(wl->vio)) {
ret = PTR_ERR(wl->vio);
wl1251_error("vio regulator missing: %d", ret);
goto out_free;
}
ret = regulator_enable(wl->vio);
if (ret)
goto out_free;
ret = wl1251_init_ieee80211(wl);
if (ret)
goto disable_regulator;
return 0;
disable_regulator:
regulator_disable(wl->vio);
out_free:
ieee80211_free_hw(hw);
//.........这里部分代码省略.........
示例12: s5k43_power
static int s5k43_power(struct device *dev, int flag)
{
static int initialized = FALSE; // for checking is probe state
#ifdef CONFIG_LEDS_RT8547
static struct regulator *vcamera_vbuck5; // 5M CORE : 1.2V
if (!vcamera_vbuck5) {
vcamera_vbuck5 = regulator_get(dev, "v_cam_c");
if (IS_ERR(vcamera_vbuck5)) {
vcamera_vbuck5 = NULL;
pr_err(KERN_ERR "Enable vcamera_vbuck5 failed!\n");
return -EIO;
}
}
#endif
if (flag) {
switch_i2c_gpio_mfp(I2C_PIN);
Cam_Printk("---camera power ON ----------\n");
/* Sensor AVDD : 2.8V ON */
gpio_direction_output(CAM_AVDD, 1);
msleep(1);
/* Sensor IO : 1.8V ON */
gpio_direction_output(CAM_IO, 1);
/* AF : 2.8V ON */
gpio_direction_output(CAM_AF, 1);
msleep(1);
/* VT STBY Enable */
gpio_direction_output(Sub_EN, 1);
/* Ccic Mclk enbale, enable/disable clk api is in mmp_camera.c */
pxa_ccic_enable_mclk(samsung_camera.pcdev, V4L2_MBUS_CSI2);
/* VT Rest Enable */
gpio_direction_output(Sub_RST, 0);
msleep(5);
gpio_direction_output(Sub_RST, 1);
msleep(2);
/* VT STBY Disable */
gpio_direction_output(Sub_EN, 0);
/* 5M Core : 1.2V ON */
#ifdef CONFIG_LEDS_RT8547
regulator_set_voltage(vcamera_vbuck5, 1200000, 1200000);
regulator_enable(vcamera_vbuck5);
#else
gpio_direction_output(CAM_CORE, 1);
#endif
msleep(1);
/* 5M STBY Enable */
gpio_direction_output(Main_STBY, 1);
/* 5M Reset Enable*/
gpio_direction_output(Main_RST, 0);
msleep(2);
gpio_direction_output(Main_RST, 1);
msleep(5);
/*for s5k power off maybe pull down the i2c data pin, so we have to reset i2c controller */
samsung_camera.i2c_pxa_reset(samsung_camera.i2c);
}else {
Cam_Printk("---camera power OFF ----------\n");
if((initialized==TRUE)&&(rear_camera==FALSE))
camera_flash_on_off(POWER_OFF); // Flash Off
/* 5M Reset Disable*/
gpio_direction_output(Main_RST, 0);
msleep(1);
/* Ccic Mclk enbale, enable/disable clk api is in mmp_camera.c */
msleep(5);
pxa_ccic_disable_mclk(samsung_camera.pcdev, V4L2_MBUS_CSI2);
/* 5M STBY Disable */
gpio_direction_output(Main_STBY, 0);
/* VT Rest Disable */
gpio_direction_output(Sub_RST, 0);
/* 5M Core : 1.2V OFF */
#ifdef CONFIG_LEDS_RT8547
regulator_disable(vcamera_vbuck5);
#else
gpio_direction_output(CAM_CORE, 0);
#endif
/* Sensor IO : 1.8V OFF */
gpio_direction_output(CAM_IO, 0);
/* Sensor AVDD : 2.8V OFF */
gpio_direction_output(CAM_AVDD, 0);
//.........这里部分代码省略.........
示例13: sr030pc30_power
static int sr030pc30_power(struct device *dev, int flag)
{
#ifdef CONFIG_LEDS_RT8547
static struct regulator *vcamera_vbuck5; // 5M CORE : 1.2V
if (!vcamera_vbuck5) {
vcamera_vbuck5 = regulator_get(dev, "v_cam_c");
if (IS_ERR(vcamera_vbuck5)) {
vcamera_vbuck5 = NULL;
pr_err(KERN_ERR "Enable vcamera_vbuck5 failed!\n");
return -EIO;
}
}
#endif
if (flag) {
switch_i2c_gpio_mfp(I2C_PIN);
Cam_Printk("---sr030pc30_power power ON ----------\n");
/* Sensor AVDD : 2.8V ON */
gpio_direction_output(CAM_AVDD, 1);
udelay(50);
/* Sensor IO : 1.8V ON */
gpio_direction_output(CAM_IO, 1);
/* 5M Core : 1.2V ON */
#ifdef CONFIG_LEDS_RT8547
regulator_set_voltage(vcamera_vbuck5, 1200000, 1200000);
regulator_enable(vcamera_vbuck5);
#elif CONFIG_FLED_RT5033
gpio_direction_output(CAM_CORE, 1);
#endif
/* 5M Core : 1.2V OFF */
msleep(5);
#ifdef CONFIG_LEDS_RT8547
regulator_disable(vcamera_vbuck5);
#elif CONFIG_FLED_RT5033
gpio_direction_output(CAM_CORE, 0);
#endif
msleep(1);
/* VT STBY Enable */
gpio_direction_output(Sub_EN, 1);
/* Ccic Mclk enbale, enable/disable clk api is in mmp_camera.c */
pxa_ccic_enable_mclk(samsung_camera.pcdev, V4L2_MBUS_PARALLEL);
msleep(1);
/* VT Rest Enable */
gpio_direction_output(Sub_RST, 0);
msleep(5);
gpio_direction_output(Sub_RST, 1);
msleep(40);
/*for s5k power off maybe pull down the i2c data pin, so we have to reset i2c controller */
samsung_camera.i2c_pxa_reset(samsung_camera.i2c);
}else {
Cam_Printk("---sr030pc30_power power OFF ----------\n");
/* VT Rest Disable */
gpio_direction_output(Sub_RST, 0);
/* Ccic Mclk enbale, enable/disable clk api is in mmp_camera.c */
msleep(5);
pxa_ccic_disable_mclk(samsung_camera.pcdev, V4L2_MBUS_PARALLEL);
msleep(5);
/* VT STBY Disable */
gpio_direction_output(Sub_EN, 0);
/* Sensor IO : 1.8V OFF */
gpio_direction_output(CAM_IO, 0);
/* Sensor AVDD : 2.8V OFF */
gpio_direction_output(CAM_AVDD, 0);
switch_i2c_gpio_mfp(GPIO_PIN);
}
return 0;
}
示例14: mipi_dsi_panel_power
static int mipi_dsi_panel_power(int on)
{
int rc = 0;
/* LGE_CHANGE_S [email protected] 2013-01-15 booting animation sometimes no display*/
if(on == 0){
if(firstbootend == 0){
firstbootend = 1;
return 0;
}
}
/* LGE_CHANGE_E [email protected] 2013-01-15 booting animation sometimes no display*/
if (unlikely(!dsi_gpio_initialized))
{
/* Resetting LCD Panel*/
rc = gpio_request(GPIO_LCD_RESET, "lcd_reset");
if (rc) {
pr_err("%s: gpio_request GPIO_LCD_RESET failed\n", __func__);
}
rc = gpio_tlmm_config(GPIO_CFG(GPIO_LCD_RESET, 0, GPIO_CFG_OUTPUT,
GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
if (rc) {
printk(KERN_ERR "%s: Failed to configure GPIO %d\n",
__func__, rc);
}
dsi_gpio_initialized = 1;
}
if (on) {
rc = regulator_enable(regulator_mipi_dsi[0]);
if (rc) {
pr_err("%s: vreg_enable failed for mipi_dsi_v18\n", __func__);
goto vreg_put_dsi_v18;
}
msleep(3); //LGE_CHANGE_S [changbum.lee] 20120130 : add delay
rc = regulator_enable(regulator_mipi_dsi[1]);
if (rc) {
pr_err("%s: vreg_enable failed for mipi_dsi_v28\n", __func__);
goto vreg_put_dsi_v28;
}
rc = gpio_direction_output(GPIO_LCD_RESET, 1);
if (rc) {
pr_err("%s: gpio_direction_output failed for lcd_reset\n", __func__);
goto vreg_put_dsi_v28;
}
if (firstbootend)
{
gpio_set_value(GPIO_LCD_RESET, 0); //sohyun.nam, 12-11-23, arrange nReset pin
msleep(8); //sohyun.nam, 12-11-23, arrange nReset pin
rc = regulator_disable(regulator_mipi_dsi[1]);//2.8v
msleep(15); //sohyun.nam, 12-11-23, arrange nReset pin
if (rc) {
pr_err("%s: vreg_disable failed for mipi_dsi_v28\n", __func__);
goto vreg_put_dsi_v28;
}
rc = regulator_enable(regulator_mipi_dsi[1]);//2.8v
msleep(15); //sohyun.nam, 12-11-23, arrange nReset pin
gpio_set_value(GPIO_LCD_RESET, 1); //sohyun.nam
msleep(8);
if (rc) {
pr_err("%s: vreg_enable failed for mipi_dsi_v28\n", __func__);
goto vreg_put_dsi_v28;
}
}
else {
firstbootend=1;
}
}
else//off
{
rc = regulator_disable(regulator_mipi_dsi[0]);
if (rc) {
pr_err("%s: vreg_disable failed for mipi_dsi_v18\n", __func__);
goto vreg_put_dsi_v18;
}
rc = regulator_disable(regulator_mipi_dsi[1]);
if (rc) {
pr_err("%s: vreg_disable failed for mipi_dsi_v28\n", __func__);
goto vreg_put_dsi_v28;
}
}
return 0;
vreg_put_dsi_v28:
regulator_put(regulator_mipi_dsi[1]);
vreg_put_dsi_v18:
regulator_put(regulator_mipi_dsi[0]);
return rc;
//.........这里部分代码省略.........
示例15: lis3dh_acc_config_regulator
static int lis3dh_acc_config_regulator(struct lis3dh_acc_data *acc, bool on)
{
int rc = 0, i;
int num_reg = sizeof(lis3dh_acc_vreg) / sizeof(struct sensor_regulator);
if (on) {
for (i = 0; i < num_reg; i++) {
lis3dh_acc_vreg[i].vreg =
regulator_get(&acc->client->dev,
lis3dh_acc_vreg[i].name);
if (IS_ERR(lis3dh_acc_vreg[i].vreg)) {
rc = PTR_ERR(lis3dh_acc_vreg[i].vreg);
pr_err("%s:regulator get failed rc=%d\n",
__func__, rc);
lis3dh_acc_vreg[i].vreg = NULL;
goto error_vdd;
}
if (regulator_count_voltages(
lis3dh_acc_vreg[i].vreg) > 0) {
rc = regulator_set_voltage(
lis3dh_acc_vreg[i].vreg,
lis3dh_acc_vreg[i].min_uV,
lis3dh_acc_vreg[i].max_uV);
if (rc) {
pr_err("%s: set voltage failed rc=%d\n",
__func__, rc);
regulator_put(lis3dh_acc_vreg[i].vreg);
lis3dh_acc_vreg[i].vreg = NULL;
goto error_vdd;
}
}
rc = regulator_enable(lis3dh_acc_vreg[i].vreg);
if (rc) {
pr_err("%s: regulator_enable failed rc =%d\n",
__func__, rc);
if (regulator_count_voltages(
lis3dh_acc_vreg[i].vreg) > 0) {
regulator_set_voltage(
lis3dh_acc_vreg[i].vreg, 0,
lis3dh_acc_vreg[i].max_uV);
}
regulator_put(lis3dh_acc_vreg[i].vreg);
lis3dh_acc_vreg[i].vreg = NULL;
goto error_vdd;
}
}
return rc;
} else {
i = num_reg;
}
error_vdd:
while (--i >= 0) {
if (!IS_ERR_OR_NULL(lis3dh_acc_vreg[i].vreg)) {
if (regulator_count_voltages(
lis3dh_acc_vreg[i].vreg) > 0) {
regulator_set_voltage(lis3dh_acc_vreg[i].vreg,
0, lis3dh_acc_vreg[i].max_uV);
}
regulator_disable(lis3dh_acc_vreg[i].vreg);
regulator_put(lis3dh_acc_vreg[i].vreg);
lis3dh_acc_vreg[i].vreg = NULL;
}
}
return rc;
}