1 #include <linux/regulator/machine.h>
2 #include <linux/mfd/ricoh619.h>
3 #include <linux/regulator/ricoh619-regulator.h>
4 #include <linux/power/ricoh619_battery.h>
5 #include <linux/rtc/rtc-ricoh619.h>
7 #include <linux/platform_device.h>
10 #include <mach/iomux.h>
11 #include <mach/board.h>
13 #ifdef CONFIG_MFD_RICOH619
15 static struct ricoh619 *Ricoh619;
16 static int ricoh619_pre_init(struct ricoh619 *ricoh619){
19 printk("%s,line=%d\n", __func__,__LINE__);
23 ret = ricoh619_clr_bits(ricoh619->dev,RICOH619_PWR_REP_CNT,(1 << 0)); //set restart when power off
25 /**********set dcdc mode when in sleep mode **************/
27 /*****************************************************/
31 static int ricoh619_post_init(struct ricoh619 *ricoh619)
33 struct regulator *dcdc;
34 struct regulator *ldo;
36 printk("%s,line=%d\n", __func__,__LINE__);
38 #ifndef CONFIG_RK_CONFIG
39 g_pmic_type = PMIC_TYPE_RICOH619;
41 printk("%s:g_pmic_type=%d\n",__func__,g_pmic_type);
43 for(i = 0; i < ARRAY_SIZE(ricoh619_dcdc_info); i++)
46 if(ricoh619_dcdc_info[i].min_uv == 0 && ricoh619_dcdc_info[i].max_uv == 0)
48 dcdc =regulator_get(NULL, ricoh619_dcdc_info[i].name);
49 regulator_set_voltage(dcdc, ricoh619_dcdc_info[i].min_uv, ricoh619_dcdc_info[i].max_uv);
50 regulator_set_suspend_voltage(dcdc, ricoh619_dcdc_info[i].suspend_vol);
51 regulator_set_mode(dcdc, REGULATOR_MODE_NORMAL);
52 regulator_enable(dcdc);
53 printk("%s %s =%duV end\n", __func__,ricoh619_dcdc_info[i].name, regulator_get_voltage(dcdc));
58 for(i = 0; i < ARRAY_SIZE(ricoh619_ldo_info); i++)
60 if(ricoh619_ldo_info[i].min_uv == 0 && ricoh619_ldo_info[i].max_uv == 0)
62 ldo =regulator_get(NULL, ricoh619_ldo_info[i].name);
63 regulator_set_voltage(ldo, ricoh619_ldo_info[i].min_uv, ricoh619_ldo_info[i].max_uv);
64 regulator_enable(ldo);
65 printk("%s %s =%duV end\n", __func__,ricoh619_ldo_info[i].name, regulator_get_voltage(ldo));
69 #ifdef CONFIG_RK_CONFIG
70 if(sram_gpio_init(get_port_config(pmic_slp).gpio, &pmic_sleep) < 0){
71 printk(KERN_ERR "sram_gpio_init failed\n");
74 if(port_output_init(pmic_slp, 0, "pmic_slp") < 0){
75 printk(KERN_ERR "port_output_init failed\n");
79 if(sram_gpio_init(PMU_POWER_SLEEP, &pmic_sleep) < 0){
80 printk(KERN_ERR "sram_gpio_init failed\n");
83 gpio_request(PMU_POWER_SLEEP, "NULL");
84 gpio_direction_output(PMU_POWER_SLEEP, GPIO_LOW);
88 ret = ricoh619_clr_bits(ricoh619->dev,0xb1,(7<< 0)); //set vbatdec voltage 3.0v
89 ret = ricoh619_set_bits(ricoh619->dev,0xb1,(3<< 0)); //set vbatdec voltage 3.0v
91 printk("%s,line=%d END\n", __func__,__LINE__);
95 static struct regulator_consumer_supply ricoh619_dcdc1_supply[] = {
97 .supply = "ricoh_dc1",
104 static struct regulator_consumer_supply ricoh619_dcdc2_supply[] = {
106 .supply = "ricoh_dc2",
109 .supply = "vdd_core",
113 static struct regulator_consumer_supply ricoh619_dcdc3_supply[] = {
115 .supply = "ricoh_dc3",
119 static struct regulator_consumer_supply ricoh619_dcdc4_supply[] = {
121 .supply = "ricoh_dc4",
125 static struct regulator_consumer_supply ricoh619_dcdc5_supply[] = {
127 .supply = "ricoh_dc5",
131 static struct regulator_consumer_supply ricoh619_ldo1_supply[] = {
133 .supply = "ricoh_ldo1",
136 static struct regulator_consumer_supply ricoh619_ldo2_supply[] = {
138 .supply = "ricoh_ldo2",
142 static struct regulator_consumer_supply ricoh619_ldo3_supply[] = {
144 .supply = "ricoh_ldo3",
147 static struct regulator_consumer_supply ricoh619_ldo4_supply[] = {
149 .supply = "ricoh_ldo4",
152 static struct regulator_consumer_supply ricoh619_ldo5_supply[] = {
154 .supply = "ricoh_ldo5",
157 static struct regulator_consumer_supply ricoh619_ldo6_supply[] = {
159 .supply = "ricoh_ldo6",
162 static struct regulator_consumer_supply ricoh619_ldo7_supply[] = {
164 .supply = "ricoh_ldo7",
167 static struct regulator_consumer_supply ricoh619_ldo8_supply[] = {
169 .supply = "ricoh_ldo8",
172 static struct regulator_consumer_supply ricoh619_ldo9_supply[] = {
174 .supply = "ricoh_ldo9",
177 static struct regulator_consumer_supply ricoh619_ldo10_supply[] = {
179 .supply = "ricoh_ldo10",
182 static struct regulator_consumer_supply ricoh619_ldortc1_supply[] = {
184 .supply = "ricoh_ldortc1",
188 static struct regulator_init_data ricoh619_dcdc1 = {
195 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
196 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL | REGULATOR_MODE_FAST,
199 .num_consumer_supplies = ARRAY_SIZE(ricoh619_dcdc1_supply),
200 .consumer_supplies = ricoh619_dcdc1_supply,
204 static struct regulator_init_data ricoh619_dcdc2 = {
211 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
212 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL | REGULATOR_MODE_FAST,
215 .num_consumer_supplies = ARRAY_SIZE(ricoh619_dcdc2_supply),
216 .consumer_supplies = ricoh619_dcdc2_supply,
220 static struct regulator_init_data ricoh619_dcdc3 = {
227 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
228 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL | REGULATOR_MODE_FAST,
231 .num_consumer_supplies = ARRAY_SIZE(ricoh619_dcdc3_supply),
232 .consumer_supplies = ricoh619_dcdc3_supply,
235 static struct regulator_init_data ricoh619_dcdc4 = {
242 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
243 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL | REGULATOR_MODE_FAST,
246 .num_consumer_supplies = ARRAY_SIZE(ricoh619_dcdc4_supply),
247 .consumer_supplies = ricoh619_dcdc4_supply,
249 static struct regulator_init_data ricoh619_dcdc5 = {
256 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
257 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL | REGULATOR_MODE_FAST,
260 .num_consumer_supplies = ARRAY_SIZE(ricoh619_dcdc5_supply),
261 .consumer_supplies = ricoh619_dcdc5_supply,
264 static struct regulator_init_data ricoh619_ldo1 = {
266 .name = "RICOH_LDO1",
271 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
272 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
275 .num_consumer_supplies = ARRAY_SIZE(ricoh619_ldo1_supply),
276 .consumer_supplies = ricoh619_ldo1_supply,
280 static struct regulator_init_data ricoh619_ldo2 = {
282 .name = "RICOH_LDO2",
287 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
288 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
291 .num_consumer_supplies = ARRAY_SIZE(ricoh619_ldo2_supply),
292 .consumer_supplies = ricoh619_ldo2_supply,
296 static struct regulator_init_data ricoh619_ldo3 = {
298 .name = "RICOH_LDO3",
303 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
304 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
307 .num_consumer_supplies = ARRAY_SIZE(ricoh619_ldo3_supply),
308 .consumer_supplies = ricoh619_ldo3_supply,
312 static struct regulator_init_data ricoh619_ldo4 = {
314 .name = "RICOH_LDO4",
319 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
320 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
323 .num_consumer_supplies = ARRAY_SIZE(ricoh619_ldo4_supply),
324 .consumer_supplies = ricoh619_ldo4_supply,
328 static struct regulator_init_data ricoh619_ldo5 = {
330 .name = "RICOH_LDO5",
335 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
336 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
339 .num_consumer_supplies = ARRAY_SIZE(ricoh619_ldo5_supply),
340 .consumer_supplies = ricoh619_ldo5_supply,
343 static struct regulator_init_data ricoh619_ldo6 = {
345 .name = "RICOH_LDO6",
350 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
351 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
354 .num_consumer_supplies = ARRAY_SIZE(ricoh619_ldo6_supply),
355 .consumer_supplies = ricoh619_ldo6_supply,
358 static struct regulator_init_data ricoh619_ldo7 = {
360 .name = "RICOH_LDO7",
365 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
366 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
369 .num_consumer_supplies = ARRAY_SIZE(ricoh619_ldo7_supply),
370 .consumer_supplies = ricoh619_ldo7_supply,
373 static struct regulator_init_data ricoh619_ldo8 = {
375 .name = "RICOH_LDO8",
380 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
381 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
384 .num_consumer_supplies = ARRAY_SIZE(ricoh619_ldo8_supply),
385 .consumer_supplies = ricoh619_ldo8_supply,
388 static struct regulator_init_data ricoh619_ldo9 = {
390 .name = "RICOH_LDO9",
395 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
396 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
399 .num_consumer_supplies = ARRAY_SIZE(ricoh619_ldo9_supply),
400 .consumer_supplies = ricoh619_ldo9_supply,
403 static struct regulator_init_data ricoh619_ldo10 = {
405 .name = "RICOH_LDO10",
410 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
411 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
414 .num_consumer_supplies = ARRAY_SIZE(ricoh619_ldo10_supply),
415 .consumer_supplies = ricoh619_ldo10_supply,
419 static struct regulator_init_data ricoh619_ldortc1 = {
421 .name = "RICOH_LDORTC1",
426 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
427 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
430 .num_consumer_supplies = ARRAY_SIZE(ricoh619_ldortc1_supply),
431 .consumer_supplies = ricoh619_ldortc1_supply,
434 static struct ricoh619_battery_platform_data ricoh619_power_battery = {
435 .irq = IRQ_BOARD_BASE,
436 .alarm_vol_mv = 3300,
441 static struct rtc_time rk_time = { // 2012.1.1 12:00:00 Saturday
451 static struct ricoh619_rtc_platform_data ricoh619_rtc_data = {
452 .irq = IRQ_BOARD_BASE ,
456 #define RICOH_REG(_id, _data) \
458 .id = RICOH619_ID_##_id, \
459 .name = "ricoh619-regulator", \
460 .platform_data = _data, \
463 static struct ricoh619_pwrkey_platform_data ricoh619_pwrkey_data= {
464 .irq = IRQ_BOARD_BASE + RICOH619_IRQ_POWER_ON,
468 static struct ricoh619_subdev_info ricoh619_devs[] = {
469 RICOH_REG(DC1, &ricoh619_dcdc1),
470 RICOH_REG(DC2, &ricoh619_dcdc2),
471 RICOH_REG(DC3, &ricoh619_dcdc3),
472 RICOH_REG(DC4, &ricoh619_dcdc4),
473 RICOH_REG(DC5, &ricoh619_dcdc5),
475 RICOH_REG(LDO1, &ricoh619_ldo1),
476 RICOH_REG(LDO2, &ricoh619_ldo2),
477 RICOH_REG(LDO3, &ricoh619_ldo3),
478 RICOH_REG(LDO4, &ricoh619_ldo4),
479 RICOH_REG(LDO5, &ricoh619_ldo5),
480 RICOH_REG(LDO6, &ricoh619_ldo6),
481 RICOH_REG(LDO7, &ricoh619_ldo7),
482 RICOH_REG(LDO8, &ricoh619_ldo8),
483 RICOH_REG(LDO9, &ricoh619_ldo9),
484 RICOH_REG(LDO10, &ricoh619_ldo10),
485 RICOH_REG(LDORTC1, &ricoh619_ldortc1),
489 .name ="ricoh619-battery",
490 .platform_data = &ricoh619_power_battery,
495 .name ="rtc_ricoh619",
496 .platform_data = &ricoh619_rtc_data,
501 .name ="ricoh619-pwrkey",
502 .platform_data = &ricoh619_pwrkey_data,
507 #define RICOH_GPIO_INIT(_init_apply, _output_mode, _output_val, _led_mode, _led_func) \
509 .output_mode_en = _output_mode, \
510 .output_val = _output_val, \
511 .init_apply = _init_apply, \
512 .led_mode = _led_mode, \
513 .led_func = _led_func, \
516 struct ricoh619_gpio_init_data ricoh_gpio_data[] = {
517 RICOH_GPIO_INIT(0, 1, 0, 0, 1),
518 RICOH_GPIO_INIT(0, 0, 0, 0, 0),
519 RICOH_GPIO_INIT(0, 0, 0, 0, 0),
520 RICOH_GPIO_INIT(0, 0, 0, 0, 0),
521 RICOH_GPIO_INIT(0, 0, 0, 0, 0),
524 static struct ricoh619_platform_data ricoh619_data={
525 .irq_base = IRQ_BOARD_BASE,
526 // .init_port = RICOH619_HOST_IRQ,
527 .num_subdevs = ARRAY_SIZE(ricoh619_devs),
528 .subdevs = ricoh619_devs,
529 .pre_init = ricoh619_pre_init,
530 .post_init = ricoh619_post_init,
531 //.gpio_base = RICOH619_GPIO_EXPANDER_BASE,
532 .gpio_init_data = ricoh_gpio_data,
533 .num_gpioinit_data = ARRAY_SIZE(ricoh_gpio_data),
534 .enable_shutdown_pin = 0,
537 void __sramfunc board_pmu_ricoh619_suspend(void)
539 #ifdef CONFIG_CLK_SWITCH_TO_32K
540 sram_gpio_set_value(pmic_sleep, GPIO_HIGH);
543 void __sramfunc board_pmu_ricoh619_resume(void)
545 #ifdef CONFIG_CLK_SWITCH_TO_32K
546 sram_gpio_set_value(pmic_sleep, GPIO_LOW);