blob: e6a13b13a3330f7bf9d2b96d39e8a6ff63f7e2a0 [file] [log] [blame]
Amy Maloche6218d682012-01-10 17:25:03 -08001/* Copyright (c) 2011-2012, Code Aurora Forum. All rights reserved.
Stepan Moskovchenko39236d72011-11-30 17:42:23 -08002 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 */
13
14#include <linux/interrupt.h>
Jay Chokshi06fa7542011-12-07 13:09:17 -080015#include <linux/mfd/pm8xxx/pm8038.h>
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080016#include <linux/mfd/pm8xxx/pm8xxx-adc.h>
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080017#include <linux/msm_ssbi.h>
18#include <asm/mach-types.h>
19#include <mach/msm_bus_board.h>
20#include <mach/restart.h>
21#include "devices.h"
Stepan Moskovchenko5a83dba2011-12-05 17:30:17 -080022#include "board-8930.h"
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080023
24struct pm8xxx_gpio_init {
25 unsigned gpio;
26 struct pm_gpio config;
27};
28
29struct pm8xxx_mpp_init {
30 unsigned mpp;
31 struct pm8xxx_mpp_config_data config;
32};
33
34#define PM8XXX_GPIO_INIT(_gpio, _dir, _buf, _val, _pull, _vin, _out_strength, \
35 _func, _inv, _disable) \
36{ \
Jay Chokshi06fa7542011-12-07 13:09:17 -080037 .gpio = PM8038_GPIO_PM_TO_SYS(_gpio), \
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080038 .config = { \
39 .direction = _dir, \
40 .output_buffer = _buf, \
41 .output_value = _val, \
42 .pull = _pull, \
43 .vin_sel = _vin, \
44 .out_strength = _out_strength, \
45 .function = _func, \
46 .inv_int_pol = _inv, \
47 .disable_pin = _disable, \
48 } \
49}
50
51#define PM8XXX_MPP_INIT(_mpp, _type, _level, _control) \
52{ \
Jay Chokshi06fa7542011-12-07 13:09:17 -080053 .mpp = PM8038_MPP_PM_TO_SYS(_mpp), \
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080054 .config = { \
55 .type = PM8XXX_MPP_TYPE_##_type, \
56 .level = _level, \
57 .control = PM8XXX_MPP_##_control, \
58 } \
59}
60
61#define PM8XXX_GPIO_DISABLE(_gpio) \
Jay Chokshi06fa7542011-12-07 13:09:17 -080062 PM8XXX_GPIO_INIT(_gpio, PM_GPIO_DIR_IN, 0, 0, 0, PM8038_GPIO_VIN_L11, \
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080063 0, 0, 0, 1)
64
65#define PM8XXX_GPIO_OUTPUT(_gpio, _val) \
66 PM8XXX_GPIO_INIT(_gpio, PM_GPIO_DIR_OUT, PM_GPIO_OUT_BUF_CMOS, _val, \
Jay Chokshi06fa7542011-12-07 13:09:17 -080067 PM_GPIO_PULL_NO, PM8038_GPIO_VIN_L11, \
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080068 PM_GPIO_STRENGTH_HIGH, \
69 PM_GPIO_FUNC_NORMAL, 0, 0)
70
71#define PM8XXX_GPIO_INPUT(_gpio, _pull) \
72 PM8XXX_GPIO_INIT(_gpio, PM_GPIO_DIR_IN, PM_GPIO_OUT_BUF_CMOS, 0, \
Jay Chokshi06fa7542011-12-07 13:09:17 -080073 _pull, PM8038_GPIO_VIN_L11, \
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080074 PM_GPIO_STRENGTH_NO, \
75 PM_GPIO_FUNC_NORMAL, 0, 0)
76
77#define PM8XXX_GPIO_OUTPUT_FUNC(_gpio, _val, _func) \
78 PM8XXX_GPIO_INIT(_gpio, PM_GPIO_DIR_OUT, PM_GPIO_OUT_BUF_CMOS, _val, \
Jay Chokshi06fa7542011-12-07 13:09:17 -080079 PM_GPIO_PULL_NO, PM8038_GPIO_VIN_L11, \
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080080 PM_GPIO_STRENGTH_HIGH, \
81 _func, 0, 0)
82
83#define PM8XXX_GPIO_OUTPUT_VIN(_gpio, _val, _vin) \
84 PM8XXX_GPIO_INIT(_gpio, PM_GPIO_DIR_OUT, PM_GPIO_OUT_BUF_CMOS, _val, \
85 PM_GPIO_PULL_NO, _vin, \
86 PM_GPIO_STRENGTH_HIGH, \
87 PM_GPIO_FUNC_NORMAL, 0, 0)
88
Jay Chokshi06fa7542011-12-07 13:09:17 -080089/* Initial pm8038 GPIO configurations */
Anirudh Ghayaleb3af972011-12-13 17:29:06 +053090static struct pm8xxx_gpio_init pm8038_gpios[] __initdata = {
91 /* keys GPIOs */
Anirudh Ghayalc066e042012-03-09 10:16:58 -080092 PM8XXX_GPIO_INPUT(3, PM_GPIO_PULL_UP_30),
93 PM8XXX_GPIO_INPUT(8, PM_GPIO_PULL_UP_30),
94 PM8XXX_GPIO_INPUT(10, PM_GPIO_PULL_UP_30),
95 PM8XXX_GPIO_INPUT(11, PM_GPIO_PULL_UP_30),
Amy Malochee8de95d2012-02-23 10:40:25 -080096 /* haptics gpio */
97 PM8XXX_GPIO_OUTPUT_FUNC(7, 0, PM_GPIO_FUNC_1),
Anirudh Ghayaleb3af972011-12-13 17:29:06 +053098};
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080099
Jay Chokshi06fa7542011-12-07 13:09:17 -0800100/* Initial pm8038 MPP configurations */
101static struct pm8xxx_mpp_init pm8038_mpps[] __initdata = {
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800102 /* External 5V regulator enable; shared by HDMI and USB_OTG switches. */
Jay Chokshi06fa7542011-12-07 13:09:17 -0800103 PM8XXX_MPP_INIT(3, D_INPUT, PM8038_MPP_DIG_LEVEL_VPH, DIN_TO_INT),
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800104};
105
Jay Chokshi06fa7542011-12-07 13:09:17 -0800106void __init msm8930_pm8038_gpio_mpp_init(void)
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800107{
108 int i, rc;
109
Jay Chokshi06fa7542011-12-07 13:09:17 -0800110 for (i = 0; i < ARRAY_SIZE(pm8038_gpios); i++) {
111 rc = pm8xxx_gpio_config(pm8038_gpios[i].gpio,
112 &pm8038_gpios[i].config);
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800113 if (rc) {
114 pr_err("%s: pm8xxx_gpio_config: rc=%d\n", __func__, rc);
115 break;
116 }
117 }
118
Jay Chokshi06fa7542011-12-07 13:09:17 -0800119 /* Initial MPP configuration. */
120 for (i = 0; i < ARRAY_SIZE(pm8038_mpps); i++) {
121 rc = pm8xxx_mpp_config(pm8038_mpps[i].mpp,
122 &pm8038_mpps[i].config);
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800123 if (rc) {
124 pr_err("%s: pm8xxx_mpp_config: rc=%d\n", __func__, rc);
125 break;
126 }
127 }
128}
129
Siddartha Mohanadoss3da01a12011-12-21 19:31:24 -0800130static struct pm8xxx_adc_amux pm8xxx_adc_channels_data[] = {
131 {"vcoin", CHANNEL_VCOIN, CHAN_PATH_SCALING2, AMUX_RSV1,
132 ADC_DECIMATION_TYPE2, ADC_SCALE_DEFAULT},
133 {"vbat", CHANNEL_VBAT, CHAN_PATH_SCALING2, AMUX_RSV1,
134 ADC_DECIMATION_TYPE2, ADC_SCALE_DEFAULT},
135 {"dcin", CHANNEL_DCIN, CHAN_PATH_SCALING4, AMUX_RSV1,
136 ADC_DECIMATION_TYPE2, ADC_SCALE_DEFAULT},
137 {"ichg", CHANNEL_ICHG, CHAN_PATH_SCALING1, AMUX_RSV1,
138 ADC_DECIMATION_TYPE2, ADC_SCALE_DEFAULT},
139 {"vph_pwr", CHANNEL_VPH_PWR, CHAN_PATH_SCALING2, AMUX_RSV1,
140 ADC_DECIMATION_TYPE2, ADC_SCALE_DEFAULT},
141 {"ibat", CHANNEL_IBAT, CHAN_PATH_SCALING1, AMUX_RSV1,
142 ADC_DECIMATION_TYPE2, ADC_SCALE_DEFAULT},
143 {"batt_therm", CHANNEL_BATT_THERM, CHAN_PATH_SCALING1, AMUX_RSV2,
144 ADC_DECIMATION_TYPE2, ADC_SCALE_BATT_THERM},
145 {"batt_id", CHANNEL_BATT_ID, CHAN_PATH_SCALING1, AMUX_RSV2,
146 ADC_DECIMATION_TYPE2, ADC_SCALE_DEFAULT},
147 {"usbin", CHANNEL_USBIN, CHAN_PATH_SCALING3, AMUX_RSV1,
148 ADC_DECIMATION_TYPE2, ADC_SCALE_DEFAULT},
149 {"pmic_therm", CHANNEL_DIE_TEMP, CHAN_PATH_SCALING1, AMUX_RSV1,
150 ADC_DECIMATION_TYPE2, ADC_SCALE_PMIC_THERM},
151 {"625mv", CHANNEL_625MV, CHAN_PATH_SCALING1, AMUX_RSV1,
152 ADC_DECIMATION_TYPE2, ADC_SCALE_DEFAULT},
153 {"125v", CHANNEL_125V, CHAN_PATH_SCALING1, AMUX_RSV1,
154 ADC_DECIMATION_TYPE2, ADC_SCALE_DEFAULT},
155 {"chg_temp", CHANNEL_CHG_TEMP, CHAN_PATH_SCALING1, AMUX_RSV1,
156 ADC_DECIMATION_TYPE2, ADC_SCALE_DEFAULT},
157 {"pa_therm1", ADC_MPP_1_AMUX4, CHAN_PATH_SCALING1, AMUX_RSV1,
158 ADC_DECIMATION_TYPE2, ADC_SCALE_PA_THERM},
159 {"xo_therm", CHANNEL_MUXOFF, CHAN_PATH_SCALING1, AMUX_RSV0,
160 ADC_DECIMATION_TYPE2, ADC_SCALE_XOTHERM},
161 {"pa_therm0", ADC_MPP_1_AMUX3, CHAN_PATH_SCALING1, AMUX_RSV1,
162 ADC_DECIMATION_TYPE2, ADC_SCALE_PA_THERM},
163};
164
165static struct pm8xxx_adc_properties pm8xxx_adc_data = {
166 .adc_vdd_reference = 1800, /* milli-voltage for this adc */
167 .bitresolution = 15,
168 .bipolar = 0,
169};
170
171static struct pm8xxx_adc_platform_data pm8xxx_adc_pdata = {
172 .adc_channel = pm8xxx_adc_channels_data,
173 .adc_num_board_channel = ARRAY_SIZE(pm8xxx_adc_channels_data),
174 .adc_prop = &pm8xxx_adc_data,
175 .adc_mpp_base = PM8038_MPP_PM_TO_SYS(1),
176};
177
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800178static struct pm8xxx_irq_platform_data pm8xxx_irq_pdata __devinitdata = {
Jay Chokshi06fa7542011-12-07 13:09:17 -0800179 .irq_base = PM8038_IRQ_BASE,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800180 .devirq = MSM_GPIO_TO_INT(104),
181 .irq_trigger_flag = IRQF_TRIGGER_LOW,
182};
183
184static struct pm8xxx_gpio_platform_data pm8xxx_gpio_pdata __devinitdata = {
Jay Chokshi06fa7542011-12-07 13:09:17 -0800185 .gpio_base = PM8038_GPIO_PM_TO_SYS(1),
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800186};
187
188static struct pm8xxx_mpp_platform_data pm8xxx_mpp_pdata __devinitdata = {
Jay Chokshi06fa7542011-12-07 13:09:17 -0800189 .mpp_base = PM8038_MPP_PM_TO_SYS(1),
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800190};
191
192static struct pm8xxx_rtc_platform_data pm8xxx_rtc_pdata __devinitdata = {
Jay Chokshi06fa7542011-12-07 13:09:17 -0800193 .rtc_write_enable = false,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800194 .rtc_alarm_powerup = false,
195};
196
197static struct pm8xxx_pwrkey_platform_data pm8xxx_pwrkey_pdata = {
198 .pull_up = 1,
Amy Maloche6218d682012-01-10 17:25:03 -0800199 .kpd_trigger_delay_us = 15625,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800200 .wakeup = 1,
201};
202
David Keitelc72d8192012-01-09 11:33:55 -0800203static int pm8921_therm_mitigation[] = {
204 1100,
205 700,
206 600,
207 325,
208};
209
210#define MAX_VOLTAGE_MV 4200
211static struct pm8921_charger_platform_data pm8921_chg_pdata __devinitdata = {
212 .safety_time = 180,
213 .update_time = 60000,
214 .max_voltage = MAX_VOLTAGE_MV,
215 .min_voltage = 3200,
216 .resume_voltage_delta = 100,
217 .term_current = 100,
218 .cool_temp = 10,
219 .warm_temp = 40,
220 .temp_check_period = 1,
221 .max_bat_chg_current = 1100,
222 .cool_bat_chg_current = 350,
223 .warm_bat_chg_current = 350,
224 .cool_bat_voltage = 4100,
225 .warm_bat_voltage = 4100,
226 .thermal_mitigation = pm8921_therm_mitigation,
227 .thermal_levels = ARRAY_SIZE(pm8921_therm_mitigation),
Jay Chokshi74730c72012-03-15 14:11:28 -0700228 .led_src_config = LED_SRC_VPH_PWR,
David Keitelc72d8192012-01-09 11:33:55 -0800229};
230
Amy Maloche8a219312012-01-19 17:39:56 -0800231#define PM8038_WLED_MAX_CURRENT 25
Amy Malochea0352b52012-02-27 18:35:23 -0800232#define PM8XXX_LED_PWM_PERIOD 1000
233#define PM8XXX_LED_PWM_DUTY_MS 20
234#define PM8038_RGB_LED_MAX_CURRENT 12
Amy Maloche8a219312012-01-19 17:39:56 -0800235
236static struct led_info pm8038_led_info[] = {
237 [0] = {
238 .name = "wled",
Chandan Uddaraju194a4b52012-03-21 10:11:18 -0700239 .default_trigger = "bkl_trigger",
Amy Maloche8a219312012-01-19 17:39:56 -0800240 },
Amy Malochea0352b52012-02-27 18:35:23 -0800241 [1] = {
242 .name = "led:rgb_red",
243 .default_trigger = "battery-charging",
244 },
245 [2] = {
246 .name = "led:rgb_green",
247 },
248 [3] = {
249 .name = "led:rgb_blue",
250 },
Amy Maloche8a219312012-01-19 17:39:56 -0800251};
252
253static struct led_platform_data pm8038_led_core_pdata = {
254 .num_leds = ARRAY_SIZE(pm8038_led_info),
255 .leds = pm8038_led_info,
256};
257
258static struct wled_config_data wled_cfg = {
259 .dig_mod_gen_en = true,
260 .cs_out_en = true,
261 .ctrl_delay_us = 0,
262 .op_fdbck = true,
263 .ovp_val = WLED_OVP_32V,
264 .boost_curr_lim = WLED_CURR_LIMIT_525mA,
265 .num_strings = 1,
266};
267
Amy Malochea0352b52012-02-27 18:35:23 -0800268static int pm8038_led0_pwm_duty_pcts[56] = {
269 1, 4, 8, 12, 16, 20, 24, 28, 32, 36,
270 40, 44, 46, 52, 56, 60, 64, 68, 72, 76,
271 80, 84, 88, 92, 96, 100, 100, 100, 98, 95,
272 92, 88, 84, 82, 78, 74, 70, 66, 62, 58,
273 58, 54, 50, 48, 42, 38, 34, 30, 26, 22,
274 14, 10, 6, 4, 1
275};
276
Jay Chokshibe517232012-06-15 18:20:56 -0700277/*
278 * Note: There is a bug in LPG module that results in incorrect
279 * behavior of pattern when LUT index 0 is used. So effectively
280 * there are 63 usable LUT entries.
281 */
Amy Malochea0352b52012-02-27 18:35:23 -0800282static struct pm8xxx_pwm_duty_cycles pm8038_led0_pwm_duty_cycles = {
283 .duty_pcts = (int *)&pm8038_led0_pwm_duty_pcts,
284 .num_duty_pcts = ARRAY_SIZE(pm8038_led0_pwm_duty_pcts),
285 .duty_ms = PM8XXX_LED_PWM_DUTY_MS,
Jay Chokshibe517232012-06-15 18:20:56 -0700286 .start_idx = 1,
Amy Malochea0352b52012-02-27 18:35:23 -0800287};
288
Amy Maloche8a219312012-01-19 17:39:56 -0800289static struct pm8xxx_led_config pm8038_led_configs[] = {
290 [0] = {
291 .id = PM8XXX_ID_WLED,
292 .mode = PM8XXX_LED_MODE_MANUAL,
293 .max_current = PM8038_WLED_MAX_CURRENT,
Chandan Uddaraju194a4b52012-03-21 10:11:18 -0700294 .default_state = 0,
Amy Maloche8a219312012-01-19 17:39:56 -0800295 .wled_cfg = &wled_cfg,
296 },
Amy Malochea0352b52012-02-27 18:35:23 -0800297 [1] = {
298 .id = PM8XXX_ID_RGB_LED_RED,
299 .mode = PM8XXX_LED_MODE_PWM1,
300 .max_current = PM8038_RGB_LED_MAX_CURRENT,
301 .pwm_channel = 5,
302 .pwm_period_us = PM8XXX_LED_PWM_PERIOD,
303 .pwm_duty_cycles = &pm8038_led0_pwm_duty_cycles,
304 },
305 [2] = {
306 .id = PM8XXX_ID_RGB_LED_GREEN,
307 .mode = PM8XXX_LED_MODE_PWM1,
308 .max_current = PM8038_RGB_LED_MAX_CURRENT,
309 .pwm_channel = 4,
310 .pwm_period_us = PM8XXX_LED_PWM_PERIOD,
311 .pwm_duty_cycles = &pm8038_led0_pwm_duty_cycles,
312 },
313 [3] = {
314 .id = PM8XXX_ID_RGB_LED_BLUE,
315 .mode = PM8XXX_LED_MODE_PWM1,
316 .max_current = PM8038_RGB_LED_MAX_CURRENT,
317 .pwm_channel = 3,
318 .pwm_period_us = PM8XXX_LED_PWM_PERIOD,
319 .pwm_duty_cycles = &pm8038_led0_pwm_duty_cycles,
320 },
Amy Maloche8a219312012-01-19 17:39:56 -0800321};
322
323static struct pm8xxx_led_platform_data pm8xxx_leds_pdata = {
324 .led_core = &pm8038_led_core_pdata,
325 .configs = pm8038_led_configs,
326 .num_configs = ARRAY_SIZE(pm8038_led_configs),
327};
328
David Keitelc72d8192012-01-09 11:33:55 -0800329static struct pm8xxx_ccadc_platform_data pm8xxx_ccadc_pdata = {
330 .r_sense = 10,
David Keitel3c378822012-06-07 13:43:22 -0700331 .calib_delay_ms = 600000,
David Keitelc72d8192012-01-09 11:33:55 -0800332};
333
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800334static struct pm8xxx_misc_platform_data pm8xxx_misc_pdata = {
335 .priority = 0,
336};
337
Asish Bhattacharya218f80b2012-03-19 02:47:34 -0700338static struct pm8xxx_spk_platform_data pm8xxx_spk_pdata = {
339 .spk_add_enable = false,
340};
341
David Keitelc72d8192012-01-09 11:33:55 -0800342static struct pm8921_bms_platform_data pm8921_bms_pdata __devinitdata = {
David Keitel35e11872012-02-17 17:40:42 -0800343 .battery_type = BATT_UNKNOWN,
David Keitelc72d8192012-01-09 11:33:55 -0800344 .r_sense = 10,
345 .i_test = 2500,
346 .v_failure = 3000,
David Keitelc72d8192012-01-09 11:33:55 -0800347 .max_voltage_uv = MAX_VOLTAGE_MV * 1000,
348};
349
Jay Chokshi06fa7542011-12-07 13:09:17 -0800350static struct pm8038_platform_data pm8038_platform_data __devinitdata = {
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800351 .irq_pdata = &pm8xxx_irq_pdata,
352 .gpio_pdata = &pm8xxx_gpio_pdata,
353 .mpp_pdata = &pm8xxx_mpp_pdata,
354 .rtc_pdata = &pm8xxx_rtc_pdata,
355 .pwrkey_pdata = &pm8xxx_pwrkey_pdata,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800356 .misc_pdata = &pm8xxx_misc_pdata,
David Collins1d4061b2011-12-06 15:36:40 -0800357 .regulator_pdatas = msm8930_pm8038_regulator_pdata,
David Keitelc72d8192012-01-09 11:33:55 -0800358 .charger_pdata = &pm8921_chg_pdata,
359 .bms_pdata = &pm8921_bms_pdata,
Siddartha Mohanadoss3da01a12011-12-21 19:31:24 -0800360 .adc_pdata = &pm8xxx_adc_pdata,
Amy Maloche8a219312012-01-19 17:39:56 -0800361 .leds_pdata = &pm8xxx_leds_pdata,
David Keitelc72d8192012-01-09 11:33:55 -0800362 .ccadc_pdata = &pm8xxx_ccadc_pdata,
Asish Bhattacharya218f80b2012-03-19 02:47:34 -0700363 .spk_pdata = &pm8xxx_spk_pdata,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800364};
365
Jay Chokshi06fa7542011-12-07 13:09:17 -0800366static struct msm_ssbi_platform_data msm8930_ssbi_pm8038_pdata __devinitdata = {
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800367 .controller_type = MSM_SBI_CTRL_PMIC_ARBITER,
368 .slave = {
Jay Chokshi06fa7542011-12-07 13:09:17 -0800369 .name = "pm8038-core",
370 .platform_data = &pm8038_platform_data,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800371 },
372};
373
374void __init msm8930_init_pmic(void)
375{
Jay Chokshi06fa7542011-12-07 13:09:17 -0800376 pmic_reset_irq = PM8038_IRQ_BASE + PM8038_RESOUT_IRQ;
Jay Chokshi33c044a2011-12-07 13:05:40 -0800377 msm8960_device_ssbi_pmic.dev.platform_data =
Jay Chokshi06fa7542011-12-07 13:09:17 -0800378 &msm8930_ssbi_pm8038_pdata;
David Collins1d4061b2011-12-06 15:36:40 -0800379 pm8038_platform_data.num_regulators
380 = msm8930_pm8038_regulator_pdata_len;
David Keitel35e11872012-02-17 17:40:42 -0800381 if (machine_is_apq8064_mtp())
382 pm8921_bms_pdata.battery_type = BATT_PALLADIUM;
383 else if (machine_is_apq8064_liquid())
384 pm8921_bms_pdata.battery_type = BATT_DESAY;
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800385}