diff options
author | Johnny Qiu <joqiu@nvidia.com> | 2012-01-30 16:27:52 +0800 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-02-10 13:25:09 -0800 |
commit | 37d3adaccf1c3551afffacaba8ed5477a16fede7 (patch) | |
tree | 74aa10c34230eb710e7eb13ae3f6280dc368b658 /arch/arm/mach-tegra/board-kai-power.c | |
parent | c67412a2e4611eebb0c03ac94871b680e2a7aa1a (diff) |
arm: tegra: kai: Use fixed regulator
Using fixed regulator in place of gpio-switch regulator.
Fixed regulator is very similar to gpio-switch regulator
and it is available by default in linux kernel.
gpio-switch-regulator will be used only for the open
collector load switches.
bug 932578
Signed-off-by: Johnny Qiu <joqiu@nvidia.com>
Reviewed-on: http://git-master/r/78039
(cherry picked from commit cd77c6f4f0a1964de84a8b0e9411c177f8e65f34)
Change-Id: Ibfe770501f3037d5c4aac55de2ec2ce82cb95cae
Signed-off-by: Pritesh Raithatha <praithatha@nvidia.com>
Reviewed-on: http://git-master/r/82699
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Varun Wadekar <vwadekar@nvidia.com>
Tested-by: Varun Wadekar <vwadekar@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/board-kai-power.c')
-rw-r--r-- | arch/arm/mach-tegra/board-kai-power.c | 197 |
1 files changed, 93 insertions, 104 deletions
diff --git a/arch/arm/mach-tegra/board-kai-power.c b/arch/arm/mach-tegra/board-kai-power.c index 6a65d0eb7b86..4b141de8dd78 100644 --- a/arch/arm/mach-tegra/board-kai-power.c +++ b/arch/arm/mach-tegra/board-kai-power.c @@ -26,7 +26,7 @@ #include <linux/regulator/max77663-regulator.h> #include <linux/gpio.h> #include <linux/io.h> -#include <linux/regulator/gpio-switch-regulator.h> +#include <linux/regulator/fixed.h> #include <linux/power/gpio-charger.h> #include <asm/mach-types.h> @@ -339,170 +339,159 @@ static int __init kai_max77663_regulator_init(void) return 0; } -static struct regulator_consumer_supply gpio_switch_en_3v3_sys_supply[] = { +static struct regulator_consumer_supply fixed_reg_en_3v3_sys_supply[] = { REGULATOR_SUPPLY("vdd_3v3", NULL), REGULATOR_SUPPLY("vdd_3v3_devices", NULL), REGULATOR_SUPPLY("debug_cons", NULL), REGULATOR_SUPPLY("pwrdet_pex_ctl", NULL), }; -static int gpio_switch_en_3v3_sys_voltages[] = { 3300}; -static struct regulator_consumer_supply gpio_switch_en_avdd_hdmi_usb_supply[] = { +static struct regulator_consumer_supply fixed_reg_en_avdd_hdmi_usb_supply[] = { REGULATOR_SUPPLY("avdd_hdmi", NULL), REGULATOR_SUPPLY("avdd_usb", NULL), REGULATOR_SUPPLY("vddio_gmi", NULL), }; -static int gpio_switch_en_avdd_hdmi_usb_voltages[] = { 3300}; -static struct regulator_consumer_supply gpio_switch_en_1v8_cam_supply[] = { +static struct regulator_consumer_supply fixed_reg_en_1v8_cam_supply[] = { REGULATOR_SUPPLY("vdd_1v8_cam1", NULL), REGULATOR_SUPPLY("vdd_1v8_cam2", NULL), REGULATOR_SUPPLY("vdd_1v8_cam3", NULL), }; -static int gpio_switch_en_1v8_cam_voltages[] = { 1800}; -static struct regulator_consumer_supply gpio_switch_en_vddio_vid_supply[] = { +static struct regulator_consumer_supply fixed_reg_en_vddio_vid_supply[] = { REGULATOR_SUPPLY("vdd_hdmi_con", NULL), }; -static int gpio_switch_en_vddio_vid_voltages[] = { 5000}; -static struct regulator_consumer_supply gpio_switch_en_3v3_modem_supply[] = { +static struct regulator_consumer_supply fixed_reg_en_3v3_modem_supply[] = { REGULATOR_SUPPLY("vdd_mini_card", NULL), }; -static int gpio_switch_en_3v3_modem_voltages[] = { 3300}; -static struct regulator_consumer_supply gpio_switch_en_vdd_pnl_supply[] = { +static struct regulator_consumer_supply fixed_reg_en_vdd_pnl_supply[] = { REGULATOR_SUPPLY("vdd_lvds", NULL), REGULATOR_SUPPLY("vdd_lcd_panel", NULL), REGULATOR_SUPPLY("vdd_touch", NULL), REGULATOR_SUPPLY("vddio_ts", NULL), }; -static int gpio_switch_en_vdd_pnl_voltages[] = { 3300}; -static struct regulator_consumer_supply gpio_switch_en_cam3_ldo_supply[] = { +static struct regulator_consumer_supply fixed_reg_en_cam3_ldo_supply[] = { REGULATOR_SUPPLY("vdd_cam3", NULL), }; -static int gpio_switch_en_cam3_ldo_voltages[] = { 3300}; -static struct regulator_consumer_supply gpio_switch_en_vdd_com_supply[] = { +static struct regulator_consumer_supply fixed_reg_en_vdd_com_supply[] = { REGULATOR_SUPPLY("vdd_com_bd", NULL), }; -static int gpio_switch_en_vdd_com_voltages[] = { 3300}; -static struct regulator_consumer_supply gpio_switch_en_vdd_sdmmc1_supply[] = { +static struct regulator_consumer_supply fixed_reg_en_vdd_sdmmc1_supply[] = { REGULATOR_SUPPLY("vddio_sd_slot", "sdhci-tegra.0"), }; -static int gpio_switch_en_vdd_sdmmc1_voltages[] = { 3300}; -static struct regulator_consumer_supply gpio_switch_en_3v3_fuse_supply[] = { +static struct regulator_consumer_supply fixed_reg_en_3v3_fuse_supply[] = { REGULATOR_SUPPLY("vpp_fuse", NULL), }; -static int gpio_switch_en_3v3_fuse_voltages[] = { 3300}; -static struct regulator_consumer_supply gpio_switch_cdc_en_supply[] = { +static struct regulator_consumer_supply fixed_reg_cdc_en_supply[] = { REGULATOR_SUPPLY("cdc_en", NULL), }; -static int gpio_switch_cdc_en_voltages[] = { 1200}; -/* Macro for defining gpio switch regulator sub device data */ -#define GREG_INIT(_id, _var, _name, _input_supply, _always_on, _boot_on, \ - _gpio_nr, _active_low, _init_state, _pg, _enable, _disable) \ - static struct gpio_switch_regulator_subdev_data gpio_pdata_##_var = \ +/* Macro for defining fixed regulator sub device data */ +#define FIXED_SUPPLY(_name) "fixed_reg_"#_name +#define FIXED_REG(_id, _var, _name, _in_supply, _always_on, _boot_on, \ + _gpio_nr, _active_high, _boot_state, _millivolts) \ + static struct regulator_init_data ri_data_##_var = \ { \ - .regulator_name = "gpio-switch-"#_name, \ - .input_supply = _input_supply, \ - .id = _id, \ - .gpio_nr = _gpio_nr, \ - .pin_group = _pg, \ - .active_low = _active_low, \ - .init_state = _init_state, \ - .voltages = gpio_switch_##_name##_voltages, \ - .n_voltages = ARRAY_SIZE(gpio_switch_##_name##_voltages), \ + .supply_regulator = _in_supply, \ .num_consumer_supplies = \ - ARRAY_SIZE(gpio_switch_##_name##_supply), \ - .consumer_supplies = gpio_switch_##_name##_supply, \ + ARRAY_SIZE(fixed_reg_##_name##_supply), \ + .consumer_supplies = fixed_reg_##_name##_supply, \ .constraints = { \ .valid_modes_mask = (REGULATOR_MODE_NORMAL | \ - REGULATOR_MODE_STANDBY), \ + REGULATOR_MODE_STANDBY), \ .valid_ops_mask = (REGULATOR_CHANGE_MODE | \ - REGULATOR_CHANGE_STATUS | \ - REGULATOR_CHANGE_VOLTAGE), \ + REGULATOR_CHANGE_STATUS | \ + REGULATOR_CHANGE_VOLTAGE), \ .always_on = _always_on, \ .boot_on = _boot_on, \ }, \ - .enable_rail = _enable, \ - .disable_rail = _disable, \ + }; \ + static struct fixed_voltage_config fixed_reg_##_var##_pdata = \ + { \ + .supply_name = FIXED_SUPPLY(_name), \ + .microvolts = _millivolts * 1000, \ + .gpio = _gpio_nr, \ + .enable_high = _active_high, \ + .enabled_at_boot = _boot_state, \ + .init_data = &ri_data_##_var, \ + }; \ + static struct platform_device fixed_reg_##_var##_dev = { \ + .name = "reg-fixed-voltage", \ + .id = _id, \ + .dev = { \ + .platform_data = &fixed_reg_##_var##_pdata, \ + }, \ } -GREG_INIT(1, en_3v3_sys, en_3v3_sys, NULL, - 1, 0, MAX77663_GPIO_BASE + MAX77663_GPIO3, false, 1, 0, 0, 0); -GREG_INIT(2, en_avdd_hdmi_usb, en_avdd_hdmi_usb, "vdd_3v3_devices", - 1, 0, MAX77663_GPIO_BASE + MAX77663_GPIO2, false, 1, 0, 0, 0); -GREG_INIT(3, en_1v8_cam, en_1v8_cam, "vdd_gen1v8", - 0, 0, TEGRA_GPIO_PS0, false, 0, 0, 0, 0); -GREG_INIT(4, en_vddio_vid_oc, en_vddio_vid, NULL, - 0, 0, TEGRA_GPIO_PB2, false, 0, 0, 0, 0); -GREG_INIT(5, en_3v3_modem, en_3v3_modem, NULL, - 0, 0, TEGRA_GPIO_PP0, false, 0, 0, 0, 0); -GREG_INIT(6, en_vdd_pnl, en_vdd_pnl, "vdd_3v3_devices", - 0, 0, TEGRA_GPIO_PW1, false, 0, 0, 0, 0); -GREG_INIT(7, en_cam3_ldo, en_cam3_ldo, "vdd_3v3_devices", - 0, 0, TEGRA_GPIO_PR7, false, 0, 0, 0, 0); -GREG_INIT(8, en_vdd_com, en_vdd_com, "vdd_3v3_devices", - 0, 0, TEGRA_GPIO_PD0, false, 0, 0, 0, 0); -GREG_INIT(9, en_vdd_sdmmc1, en_vdd_sdmmc1, "vdd_3v3_devices", - 0, 0, TEGRA_GPIO_PC6, false, 0, 0, 0, 0); -GREG_INIT(10, en_3v3_fuse, en_3v3_fuse, "vdd_3v3_devices", - 0, 0, TEGRA_GPIO_PC1, false, 0, 0, 0, 0); -GREG_INIT(11, cdc_en, cdc_en, "vddio_audio", - 0, 1, TEGRA_GPIO_PX2, false, 0, 0, 0, 0); - - -#define ADD_GPIO_REG(_name) &gpio_pdata_##_name - -#define E1565_GPIO_REG \ - ADD_GPIO_REG(en_3v3_sys), \ - ADD_GPIO_REG(en_avdd_hdmi_usb), \ - ADD_GPIO_REG(en_1v8_cam), \ - ADD_GPIO_REG(en_vddio_vid_oc), \ - ADD_GPIO_REG(en_3v3_modem), \ - ADD_GPIO_REG(en_vdd_pnl), \ - ADD_GPIO_REG(en_cam3_ldo), \ - ADD_GPIO_REG(en_vdd_com), \ - ADD_GPIO_REG(en_vdd_sdmmc1), \ - ADD_GPIO_REG(en_3v3_fuse), \ - ADD_GPIO_REG(cdc_en), \ - - -static struct gpio_switch_regulator_subdev_data *gswitch_subdevs[] = { - E1565_GPIO_REG -}; - -static struct gpio_switch_regulator_platform_data gswitch_pdata = { - .subdevs = gswitch_subdevs, - .num_subdevs = ARRAY_SIZE(gswitch_subdevs), -}; - -static struct platform_device gswitch_regulator_pdata = { - .name = "gpio-switch-regulator", - .id = -1, - .dev = { - .platform_data = &gswitch_pdata, - }, +FIXED_REG(1, en_3v3_sys, en_3v3_sys, NULL, + 1, 0, MAX77663_GPIO_BASE + MAX77663_GPIO3, true, 1, 3300); +FIXED_REG(2, en_avdd_hdmi_usb, en_avdd_hdmi_usb, FIXED_SUPPLY(en_3v3_sys), + 1, 0, MAX77663_GPIO_BASE + MAX77663_GPIO2, true, 1, 3300); +FIXED_REG(3, en_1v8_cam, en_1v8_cam, max77663_rails(sd2), + 0, 0, TEGRA_GPIO_PS0, true, 0, 1800); +FIXED_REG(4, en_vddio_vid, en_vddio_vid, NULL, + 0, 0, TEGRA_GPIO_PB2, true, 0, 5000); +FIXED_REG(5, en_3v3_modem, en_3v3_modem, NULL, + 0, 0, TEGRA_GPIO_PP0, true, 0, 3300); +FIXED_REG(6, en_vdd_pnl, en_vdd_pnl, FIXED_SUPPLY(en_3v3_sys), + 0, 0, TEGRA_GPIO_PW1, true, 0, 3300); +FIXED_REG(7, en_cam3_ldo, en_cam3_ldo, FIXED_SUPPLY(en_3v3_sys), + 0, 0, TEGRA_GPIO_PR7, true, 0, 3300); +FIXED_REG(8, en_vdd_com, en_vdd_com, FIXED_SUPPLY(en_3v3_sys), + 0, 0, TEGRA_GPIO_PD0, true, 0, 3300); +FIXED_REG(9, en_vdd_sdmmc1, en_vdd_sdmmc1, FIXED_SUPPLY(en_3v3_sys), + 0, 0, TEGRA_GPIO_PC6, true, 0, 3300); +FIXED_REG(10, en_3v3_fuse, en_3v3_fuse, FIXED_SUPPLY(en_3v3_sys), + 0, 0, TEGRA_GPIO_PC1, true, 0, 3300); +FIXED_REG(11, cdc_en, cdc_en, max77663_rails(sd2), + 0, 1, TEGRA_GPIO_PX2, true, 0, 1200); + +/* + * Creating the fixed regulator device tables + */ + +#define ADD_FIXED_REG(_name) (&fixed_reg_##_name##_dev) + +#define E1565_FIXED_REG \ + ADD_FIXED_REG(en_3v3_sys), \ + ADD_FIXED_REG(en_avdd_hdmi_usb), \ + ADD_FIXED_REG(en_1v8_cam), \ + ADD_FIXED_REG(en_vddio_vid), \ + ADD_FIXED_REG(en_3v3_modem), \ + ADD_FIXED_REG(en_vdd_pnl), \ + ADD_FIXED_REG(en_cam3_ldo), \ + ADD_FIXED_REG(en_vdd_com), \ + ADD_FIXED_REG(en_vdd_sdmmc1), \ + ADD_FIXED_REG(en_3v3_fuse), \ + ADD_FIXED_REG(cdc_en), \ + +/* Gpio switch regulator platform data for Kai */ +static struct platform_device *fixed_reg_devs[] = { + E1565_FIXED_REG }; static int __init kai_max77663_gpio_switch_regulator_init(void) { int i; - for (i = 0; i < gswitch_pdata.num_subdevs; ++i) { - struct gpio_switch_regulator_subdev_data *gswitch_data = - gswitch_pdata.subdevs[i]; - if (gswitch_data->gpio_nr <= TEGRA_NR_GPIOS) - tegra_gpio_enable(gswitch_data->gpio_nr); + for (i = 0; i < ARRAY_SIZE(fixed_reg_devs); ++i) { + int gpio_nr; + struct fixed_voltage_config *fixed_reg_pdata = + fixed_reg_devs[i]->dev.platform_data; + gpio_nr = fixed_reg_pdata->gpio; + + if (gpio_nr < TEGRA_NR_GPIOS) + tegra_gpio_enable(gpio_nr); } - return platform_device_register(&gswitch_regulator_pdata); + return platform_add_devices(fixed_reg_devs, ARRAY_SIZE(fixed_reg_devs)); } int __init kai_regulator_init(void) |