1 /* drivers/regulator/rt5033_regulator.c
2 * RT5033 Regulator / Buck Driver
4 * Author: Patrick Chang <patrick_chang@richtek.com>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
11 #include <linux/kernel.h>
12 #include <linux/init.h>
13 #include <linux/err.h>
14 #include <linux/i2c.h>
15 #include <linux/platform_device.h>
16 #include <linux/regulator/driver.h>
17 #include <linux/regulator/machine.h>
18 #include <linux/mfd/rt5033.h>
19 #include <linux/mfd/rt5033_irq.h>
20 #include <linux/version.h>
22 #include <linux/regulator/of_regulator.h>
24 #define ALIAS_NAME "rt5033-regulator"
27 #define EN_VDDA_UV_IRQ 0
31 struct rt5033_regulator_info {
32 struct regulator_desc desc;
33 struct i2c_client *i2c;
34 struct rt5033_mfd_chip *chip;
42 unsigned int const *output_list;
43 unsigned int output_list_count;
46 #define RT5033_REGULATOR_REG_LDO_SAFE (0x43)
47 #define RT5033_REGULATOR_SHIFT_LDO_SAFE (6)
48 #define RT5033_REGULATOR_MASK_LDO_SAFE (7<<6)
49 #define RT5033_REGULATOR_REG_LDO1 (0x43)
50 #define RT5033_REGULATOR_SHIFT_LDO1 (0)
51 #define RT5033_REGULATOR_MASK_LDO1 (0x1f<<0)
52 #define RT5033_REGULATOR_REG_DCDC1 (0x42)
53 #define RT5033_REGULATOR_SHIFT_DCDC1 (0)
54 #define RT5033_REGULATOR_MASK_DCDC1 (0x1f<<0)
56 #define RT5033_REGULATOR_REG_OUTPUT_EN (0x41)
57 #define RT5033_REGULATOR_EN_MASK_LDO_SAFE (1<<6)
58 #define RT5033_REGULATOR_EN_MASK_LDO1 (1<<5)
59 #define RT5033_REGULATOR_EN_MASK_DCDC1 (1<<4)
61 static const unsigned int rt5033_dcdc_output_list[] = {
85 static const unsigned int rt5033_ldo_output_list[] = {
107 static const unsigned int rt5033_safe_ldo_output_list[] = {
114 #define RT5033_REGULATOR_DECL(_id, min, max,out_list) \
117 .name = "RT5033_REGULATOR_" #_id, \
118 .ops = &rt5033_regulator_ldo_dcdc_ops, \
119 .type = REGULATOR_VOLTAGE, \
120 .id = RT5033_ID_##_id, \
121 .owner = THIS_MODULE, \
122 .n_voltages = ARRAY_SIZE(out_list), \
124 .min_uV = min * 1000, \
125 .max_uV = max * 1000, \
126 .vol_reg = RT5033_REGULATOR_REG_##_id, \
127 .vol_shift = RT5033_REGULATOR_SHIFT_##_id, \
128 .vol_mask = RT5033_REGULATOR_MASK_##_id, \
129 .enable_reg = RT5033_REGULATOR_REG_OUTPUT_EN, \
130 .enable_bit = RT5033_REGULATOR_EN_MASK_##_id, \
131 .output_list = out_list, \
132 .output_list_count = ARRAY_SIZE(out_list), \
135 static inline int rt5033_regulator_check_range(struct rt5033_regulator_info *info,
136 int min_uV, int max_uV)
138 if (min_uV < info->min_uV || max_uV > info->max_uV)
144 static int rt5033_regulator_list_voltage(struct regulator_dev *rdev, unsigned index)
146 struct rt5033_regulator_info *info = rdev_get_drvdata(rdev);
148 return (index>=info->output_list_count)?
149 -EINVAL: info->output_list[index];
153 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,39))
154 int rt5033_regulator_set_voltage_sel(struct regulator_dev *rdev, unsigned selector)
156 struct rt5033_regulator_info *info = rdev_get_drvdata(rdev);
160 pr_info("%s select = %d, output list count = %d\n",
161 ALIAS_NAME, selector, info->output_list_count);
162 if (selector>=info->output_list_count)
164 pr_info("%s Vout = %d\n", ALIAS_NAME, info->output_list[selector]);
165 data = (unsigned char)selector;
166 data <<= info->vol_shift;
167 ret = rt5033_assign_bits(info->i2c, info->vol_reg, info->vol_mask, data);
169 pr_info("%s %s %s ret (%d)", ALIAS_NAME, rdev->desc->name, __func__, ret);
175 static int rt5033_regulator_get_voltage_sel(struct regulator_dev *rdev)
177 struct rt5033_regulator_info *info = rdev_get_drvdata(rdev);
179 ret = rt5033_reg_read(info->i2c, info->vol_reg);
182 return (ret & info->vol_mask) >> info->vol_shift;
185 #if (LINUX_VERSION_CODE<KERNEL_VERSION(2,6,39))
186 static int rt5033_regulator_find_voltage(struct regulator_dev *rdev,
187 int min_uV, int max_uV)
190 struct rt5033_regulator_info *info = rdev_get_drvdata(rdev);
191 const int count = info->output_list_count;
192 for (i=0;i<count;i++)
194 if ((info->output_list[i]>=min_uV)
195 && (info->output_list[i]<=max_uV))
197 pr_info("%s Found V = %d , min_uV = %d,max_uV = %d\n",
198 ALIAS_NAME, info->output_list[i], min_uV, max_uV);
203 pr_err("%s Not found min_uV = %d, max_uV = %d\n",
204 ALIAS_NAME, min_uV, max_uV);
207 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,38))
208 static int rt5033_regulator_set_voltage(struct regulator_dev *rdev,
209 int min_uV, int max_uV,unsigned *selector)
211 struct rt5033_regulator_info *info = rdev_get_drvdata(rdev);
214 if (rt5033_regulator_check_range(info, min_uV, max_uV)) {
215 pr_err("%s %s invalid voltage range (%d, %d) uV\n",
216 ALIAS_NAME, rdev->desc->name, min_uV, max_uV);
219 *selector = rt5033_regulator_find_voltage(rdev,min_uV,max_uV);
220 data = *selector << info->vol_shift;
222 return rt5033_assign_bits(info->i2c, info->vol_reg, info->vol_mask, data);
226 static int rt5033_regulator_set_voltage(struct regulator_dev *rdev,
227 int min_uV, int max_uV,int *selector)
229 struct rt5033_regulator_info *info = rdev_get_drvdata(rdev);
233 if (rt5033_regulator_check_range(info, min_uV, max_uV)) {
234 pr_err("%s %s invalid voltage range (%d, %d) uV\n",
235 ALIAS_NAME, rdev->desc->name, min_uV, max_uV);
238 data = rt5033_regulator_find_voltage(rdev,min_uV,max_uV);
239 data <<= info->vol_shift;
240 ret = rt5033_assign_bits(info->i2c, info->vol_reg, info->vol_mask, data);
242 pr_info("%s %s ret (%d)", ALIAS_NAME, __func__, ret);
246 #endif //(LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,38))
248 static int rt5033_regulator_get_voltage(struct regulator_dev *rdev)
251 ret = rt5033_regulator_get_voltage_sel(rdev);
254 return rt5033_regulator_list_voltage(rdev, ret);
256 #endif //(LINUX_VERSION_CODE<KERNEL_VERSION(2,6,39))
259 static int rt5033_regulator_enable(struct regulator_dev *rdev)
261 struct rt5033_regulator_info *info = rdev_get_drvdata(rdev);
263 pr_info("%s Enable regulator %s\n", ALIAS_NAME, rdev->desc->name);
264 ret = rt5033_set_bits(info->i2c, info->enable_reg,
266 pr_info("%s %s %s ret (%d)", ALIAS_NAME, rdev->desc->name, __func__, ret);
271 static int rt5033_regulator_disable(struct regulator_dev *rdev)
273 struct rt5033_regulator_info *info = rdev_get_drvdata(rdev);
276 pr_info("%s Disable regulator %s\n", ALIAS_NAME, rdev->desc->name);
277 ret = rt5033_clr_bits(info->i2c, info->enable_reg,
279 pr_info("%s %s ret (%d)", ALIAS_NAME, __func__, ret);
284 static int rt5033_regulator_is_enabled(struct regulator_dev *rdev)
286 struct rt5033_regulator_info *info = rdev_get_drvdata(rdev);
289 ret = rt5033_reg_read(info->i2c, info->enable_reg);
293 ret = (ret & (info->enable_bit))?1:0;
294 pr_info("%s %s %s ret (%d)", ALIAS_NAME, rdev->desc->name, __func__, ret);
298 static struct regulator_ops rt5033_regulator_ldo_dcdc_ops = {
299 .list_voltage = rt5033_regulator_list_voltage,
300 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,39))
301 .get_voltage_sel = rt5033_regulator_get_voltage_sel,
302 .set_voltage_sel = rt5033_regulator_set_voltage_sel,
304 .set_voltage = rt5033_regulator_set_voltage,
305 .get_voltage = rt5033_regulator_get_voltage,
307 .enable = rt5033_regulator_enable,
308 .disable = rt5033_regulator_disable,
309 .is_enabled = rt5033_regulator_is_enabled,
312 static struct rt5033_regulator_info rt5033_regulator_infos[] = {
313 RT5033_REGULATOR_DECL(LDO_SAFE, 3300, 4950, rt5033_safe_ldo_output_list),
314 RT5033_REGULATOR_DECL(LDO1, 1200, 3000, rt5033_ldo_output_list),
315 RT5033_REGULATOR_DECL(DCDC1, 1000, 3300, rt5033_dcdc_output_list),
318 static struct rt5033_regulator_info * find_regulator_info(int id)
320 struct rt5033_regulator_info *ri;
323 for (i = 0; i < ARRAY_SIZE(rt5033_regulator_infos); i++) {
324 ri = &rt5033_regulator_infos[i];
325 if (ri->desc.id == id)
331 inline struct regulator_dev* rt5033_regulator_register(struct regulator_desc *regulator_desc,
332 struct device *dev, struct regulator_init_data *init_data,
335 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(3,5,0))
336 struct regulator_config config = {
338 .init_data = init_data,
339 .driver_data = driver_data,
340 .of_node = dev->of_node,
342 return regulator_register(regulator_desc, &config);
343 #elif (LINUX_VERSION_CODE>=KERNEL_VERSION(3,0,0))
344 return regulator_register(regulator_desc, dev,
345 init_data, driver_data, dev->of_node);
347 return regulator_register(regulator_desc, dev,
348 init_data, driver_data);
352 static int rt5033_regulator_init_regs(struct regulator_dev* rdev)
357 static struct regulator_consumer_supply default_rt5033_safe_ldo_consumers[] = {
358 REGULATOR_SUPPLY("rt5033_safe_ldo",NULL),
360 static struct regulator_consumer_supply default_rt5033_ldo_consumers[] = {
361 REGULATOR_SUPPLY("rt5033_ldo",NULL),
363 static struct regulator_consumer_supply default_rt5033_buck_consumers[] = {
364 REGULATOR_SUPPLY("rt5033_buck",NULL),
367 static struct regulator_init_data default_rt5033_safe_ldo_data = {
371 .valid_modes_mask = REGULATOR_MODE_NORMAL,
372 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS,
375 .num_consumer_supplies = ARRAY_SIZE(default_rt5033_safe_ldo_consumers),
376 .consumer_supplies = default_rt5033_safe_ldo_consumers,
378 static struct regulator_init_data default_rt5033_ldo_data = {
382 .valid_modes_mask = REGULATOR_MODE_NORMAL,
383 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS,
385 .num_consumer_supplies = ARRAY_SIZE(default_rt5033_ldo_consumers),
386 .consumer_supplies = default_rt5033_ldo_consumers,
388 static struct regulator_init_data default_rt5033_buck_data = {
392 .valid_modes_mask = REGULATOR_MODE_NORMAL | REGULATOR_MODE_IDLE,
393 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS,
395 .num_consumer_supplies = ARRAY_SIZE(default_rt5033_buck_consumers),
396 .consumer_supplies = default_rt5033_buck_consumers,
399 static struct rt5033_regulator_platform_data default_rv_pdata = {
401 [RT5033_ID_LDO_SAFE] = &default_rt5033_safe_ldo_data,
402 [RT5033_ID_LDO1] = &default_rt5033_ldo_data,
403 [RT5033_ID_DCDC1] = &default_rt5033_buck_data,
408 struct rt5033_pmic_irq_handler {
411 irqreturn_t (*handler)(int irq, void *data);
415 static irqreturn_t rt5033_pmic_buck_ocp_event_handler(int irq, void *data)
417 struct regulator_dev *rdev = data;
418 struct rt5033_regulator_info *info = rdev_get_drvdata(rdev);
419 BUG_ON(rdev == NULL);
420 BUG_ON(info == NULL);
421 pr_info("Buck OCP\n");
425 static irqreturn_t rt5033_pmic_buck_lv_event_handler(int irq, void *data)
427 struct regulator_dev *rdev = data;
428 struct rt5033_regulator_info *info = rdev_get_drvdata(rdev);
429 BUG_ON(rdev == NULL);
430 BUG_ON(info == NULL);
431 pr_info("Buck LV\n");
435 static irqreturn_t rt5033_pmic_ot_event_handler(int irq, void *data)
437 struct regulator_dev *rdev = data;
438 struct rt5033_regulator_info *info = rdev_get_drvdata(rdev);
439 BUG_ON(rdev == NULL);
440 BUG_ON(info == NULL);
441 pr_info("PMIC OT\n");
444 #endif /* EN_BUCK_IRQ */
448 static irqreturn_t rt5033_pmic_vdda_uv_event_handler(int irq, void *data)
450 struct regulator_dev *rdev = data;
451 struct rt5033_regulator_info *info = rdev_get_drvdata(rdev);
452 BUG_ON(rdev == NULL);
453 BUG_ON(info == NULL);
454 pr_info("PMIC VDDA UV\n");
457 #endif /* EN_VDDA_UV_IRQ */
460 static irqreturn_t rt5033_pmic_safeldo_lv_event_handler(int irq, void *data)
462 struct regulator_dev *rdev = data;
463 struct rt5033_regulator_info *info = rdev_get_drvdata(rdev);
464 BUG_ON(rdev == NULL);
465 BUG_ON(info == NULL);
466 pr_info("Safe LDO LV\n");
469 #endif /* EN_SLDO_IRQ */
472 static irqreturn_t rt5033_pmic_ldo_lv_event_handler(int irq, void *data)
474 struct regulator_dev *rdev = data;
475 struct rt5033_regulator_info *info = rdev_get_drvdata(rdev);
476 BUG_ON(rdev == NULL);
477 BUG_ON(info == NULL);
481 #endif /* EN_LDO_IRQ */
483 const struct rt5033_pmic_irq_handler rt5033_pmic_buck_irq_handlers[] = {
487 .handler = rt5033_pmic_buck_ocp_event_handler,
488 .irq_index = RT5033_BUCK_OCP_IRQ,
492 .handler = rt5033_pmic_buck_lv_event_handler,
493 .irq_index = RT5033_BUCK_LV_IRQ,
497 .handler = rt5033_pmic_ot_event_handler,
498 .irq_index = RT5033_OT_IRQ,
500 #endif /* EN_BUCK_IRQ */
503 .name = "PMIC VDDA UV",
504 .handler = rt5033_pmic_vdda_uv_event_handler,
505 .irq_index = RT5033_VDDA_UV_IRQ,
507 #endif /* EN_VDDA_UV_IRQ */
510 const struct rt5033_pmic_irq_handler rt5033_pmic_safeldo_irq_handlers[] = {
513 .name = "SafeLDO LV",
514 .handler = rt5033_pmic_safeldo_lv_event_handler,
515 .irq_index = RT5033_SAFE_LDO_LV_IRQ,
519 const struct rt5033_pmic_irq_handler rt5033_pmic_ldo_irq_handlers[] = {
523 .handler = rt5033_pmic_ldo_lv_event_handler,
524 .irq_index = RT5033_LDO_LV_IRQ,
529 static int register_irq(struct platform_device *pdev,
530 struct regulator_dev *rdev,
531 const struct rt5033_pmic_irq_handler *irq_handler,
532 int irq_handler_size)
537 const char *irq_name;
538 for (i = 0; i < irq_handler_size; i++) {
539 irq_name = rt5033_get_irq_name_by_index(irq_handler[i].irq_index);
540 irq = platform_get_irq_byname(pdev, irq_name);
541 ret = request_threaded_irq(irq, NULL, irq_handler[i].handler,
542 IRQF_ONESHOT | IRQF_TRIGGER_RISING | IRQF_NO_SUSPEND,
545 pr_err("Failed to request IRQ: #%d: %d\n", irq, ret);
552 for (j = 0; j < i; j++) {
553 irq_name = rt5033_get_irq_name_by_index(irq_handler[j].irq_index);
554 irq = platform_get_irq_byname(pdev, irq_name);
560 static void unregister_irq(struct platform_device *pdev,
561 struct regulator_dev *rdev,
562 const struct rt5033_pmic_irq_handler *irq_handler,
563 int irq_handler_size)
567 const char *irq_name;
568 for (i = 0; i < irq_handler_size; i++) {
569 irq_name = rt5033_get_irq_name_by_index(irq_handler[i].irq_index);
570 irq = platform_get_irq_byname(pdev, irq_name);
576 static struct of_device_id rt5033_regulator_match_table[] = {
577 { .compatible = "richtek,rt5033-safeldo",},
578 { .compatible = "richtek,rt5033-ldo1",},
579 { .compatible = "richtek,rt5033-dcdc1",},
583 #define rt5033_regulator_match_table NULL
586 static int rt5033_regulator_probe(struct platform_device *pdev)
588 struct rt5033_mfd_chip *chip = dev_get_drvdata(pdev->dev.parent);
589 struct rt5033_mfd_platform_data *mfd_pdata = chip->dev->platform_data;
590 const struct rt5033_regulator_platform_data* pdata;
591 const struct rt5033_pmic_irq_handler *irq_handler = NULL;
592 int irq_handler_size = 0;
593 struct rt5033_regulator_info *ri;
594 struct regulator_dev *rdev;
595 struct regulator_init_data* init_data;
597 dev_info(&pdev->dev, "Richtek RT5033 regulator driver probing (id = %d)...\n", pdev->id);
599 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0))
600 if (pdev->dev.parent->of_node) {
601 pdev->dev.of_node = of_find_compatible_node(
602 of_node_get(pdev->dev.parent->of_node), NULL,
603 rt5033_regulator_match_table[pdev->id].compatible);
607 if (pdev->dev.of_node) {
608 dev_info(&pdev->dev, "Use DT...\n");
609 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(3,1,0))
610 init_data = of_get_regulator_init_data(&pdev->dev, pdev->dev.of_node);
612 init_data = of_get_regulator_init_data(&pdev->dev);
614 if (init_data == NULL) {
615 dev_info(&pdev->dev, "Cannot find DTS data...\n");
616 init_data = default_rv_pdata.regulator[pdev->id];
620 BUG_ON(mfd_pdata == NULL);
621 if (mfd_pdata->regulator_platform_data == NULL)
622 mfd_pdata->regulator_platform_data = &default_rv_pdata;
623 pdata = mfd_pdata->regulator_platform_data;
624 init_data = pdata->regulator[pdev->id];
626 ri = find_regulator_info(pdev->id);
628 dev_err(&pdev->dev, "invalid regulator ID specified\n");
631 if (init_data == NULL) {
632 dev_err(&pdev->dev, "no initializing data\n");
635 ri->i2c = chip->i2c_client;
637 chip->regulator_info[pdev->id] = ri;
639 rdev = rt5033_regulator_register(&ri->desc, &pdev->dev,
642 dev_err(&pdev->dev, "failed to register regulator %s\n",
644 return PTR_ERR(rdev);
646 platform_set_drvdata(pdev, rdev);
647 ret = rt5033_regulator_init_regs(rdev);
649 goto err_init_device;
650 dev_info(&pdev->dev, "RT5033 Regulator %s driver loaded successfully...\n",
655 case RT5033_ID_LDO_SAFE:
656 irq_handler = rt5033_pmic_safeldo_irq_handlers;
657 irq_handler_size = ARRAY_SIZE(rt5033_pmic_safeldo_irq_handlers);
660 irq_handler = rt5033_pmic_ldo_irq_handlers;
661 irq_handler_size = ARRAY_SIZE(rt5033_pmic_ldo_irq_handlers);
663 case RT5033_ID_DCDC1:
664 irq_handler = rt5033_pmic_buck_irq_handlers;
665 irq_handler_size = ARRAY_SIZE(rt5033_pmic_buck_irq_handlers);
668 pr_err("Error : invalid ID\n");
670 ret = register_irq(pdev, rdev, irq_handler, irq_handler_size);
672 pr_err("Error : can't register irq\n");
673 goto err_register_irq;
678 dev_info(&pdev->dev, "RT5033 Regulator %s unregistered...\n",
680 regulator_unregister(rdev);
684 static int rt5033_regulator_remove(struct platform_device *pdev)
686 struct regulator_dev *rdev = platform_get_drvdata(pdev);
687 const struct rt5033_pmic_irq_handler *irq_handler = NULL;
688 int irq_handler_size = 0;
689 dev_info(&pdev->dev, "RT5033 Regulator %s unregistered...\n",
693 case RT5033_ID_LDO_SAFE:
694 irq_handler = rt5033_pmic_safeldo_irq_handlers;
695 irq_handler_size = ARRAY_SIZE(rt5033_pmic_safeldo_irq_handlers);
698 irq_handler = rt5033_pmic_ldo_irq_handlers;
699 irq_handler_size = ARRAY_SIZE(rt5033_pmic_ldo_irq_handlers);
701 case RT5033_ID_DCDC1:
702 irq_handler = rt5033_pmic_buck_irq_handlers;
703 irq_handler_size = ARRAY_SIZE(rt5033_pmic_buck_irq_handlers);
706 pr_err("Error : invalid ID\n");
708 unregister_irq(pdev, rdev, irq_handler, irq_handler_size);
709 platform_set_drvdata(pdev, NULL);
710 regulator_unregister(rdev);
714 static struct platform_driver rt5033_regulator_driver = {
716 .name = "rt5033-regulator",
717 .owner = THIS_MODULE,
718 .of_match_table = rt5033_regulator_match_table,
720 .probe = rt5033_regulator_probe,
721 .remove = rt5033_regulator_remove,
724 static int __init rt5033_regulator_init(void)
726 return platform_driver_register(&rt5033_regulator_driver);
728 subsys_initcall(rt5033_regulator_init);
730 static void __exit rt5033_regulator_exit(void)
732 platform_driver_unregister(&rt5033_regulator_driver);
734 module_exit(rt5033_regulator_exit);
736 MODULE_LICENSE("GPL");
737 MODULE_AUTHOR("Patrick Chang <patrick_chang@richtek.com");
738 MODULE_VERSION(RT5033_DRV_VER);
739 MODULE_DESCRIPTION("Regulator driver for RT5033");
740 MODULE_ALIAS("platform:rt5033-regulator");