From 56fc3cfb37f40fb7ce929ec71fdc560f55d0ef89 Mon Sep 17 00:00:00 2001 From: zeroway Date: Fri, 10 Feb 2017 17:47:00 +0000 Subject: [PATCH] regulator : add power tree and head file rk818 --- debug/regulator/README.md | 10 + debug/regulator/rk818.c | 504 ++++++++++++++-------------- debug/regulator/rk818.h | 178 ++++++++++ debug/regulator/rk818_powertree.png | Bin 0 -> 94567 bytes debug/regulator/rk818_test.dtsi | 8 + 5 files changed, 446 insertions(+), 254 deletions(-) create mode 100755 debug/regulator/rk818.h create mode 100644 debug/regulator/rk818_powertree.png create mode 100644 debug/regulator/rk818_test.dtsi diff --git a/debug/regulator/README.md b/debug/regulator/README.md index 4f988f9..6171a58 100644 --- a/debug/regulator/README.md +++ b/debug/regulator/README.md @@ -115,6 +115,16 @@ done ## RK818 PMU驱动 +![PowerTree](./rk818_powertree.png) + +可以从上图中看出TP使用的LDO2,下面就测试这个LDO + +### Usage + +在主dts文件中包含下面的dtsi文件 + + #include "rk818_test.dtsi" + ### 测试方法 - 加载PMU驱动 diff --git a/debug/regulator/rk818.c b/debug/regulator/rk818.c index d832ecd..cf861c3 100644 --- a/debug/regulator/rk818.c +++ b/debug/regulator/rk818.c @@ -3,8 +3,9 @@ #include #include #include -#include -#include +#include +#include +#include #include #include #include @@ -20,6 +21,8 @@ #include #include +#include "rk818.h" + #define BUCK_VOL_MASK 0x3f #define LDO_VOL_MASK 0x3f #define LDO9_VOL_MASK 0x1f @@ -29,29 +32,36 @@ #define VOL_MAX_IDX 0x3f #define RK818_I2C_ADDR_RATE 200*1000 +/* FIXME should not extern */ +extern struct regulator_dev *devm_regulator_register(struct device *dev, + const struct regulator_desc *regulator_desc, + const struct regulator_config *config); + const static int buck_set_vol_base_addr[] = { RK818_BUCK1_ON_REG, RK818_BUCK2_ON_REG, RK818_BUCK3_CONFIG_REG, RK818_BUCK4_ON_REG, }; + const static int buck_set_slp_vol_base_addr[] = { RK818_BUCK1_SLP_REG, RK818_BUCK2_SLP_REG, RK818_BUCK3_CONFIG_REG, RK818_BUCK4_SLP_VSEL_REG, }; + const static int buck_contr_base_addr[] = { RK818_BUCK1_CONFIG_REG, RK818_BUCK2_CONFIG_REG, RK818_BUCK3_CONFIG_REG, RK818_BUCK4_CONFIG_REG, }; + #define rk818_BUCK_SET_VOL_REG(x) (buck_set_vol_base_addr[x]) #define rk818_BUCK_CONTR_REG(x) (buck_contr_base_addr[x]) #define rk818_BUCK_SET_SLP_VOL_REG(x) (buck_set_slp_vol_base_addr[x]) - const static int ldo_set_vol_base_addr[] = { RK818_LDO1_ON_VSEL_REG, RK818_LDO2_ON_VSEL_REG, @@ -63,6 +73,7 @@ const static int ldo_set_vol_base_addr[] = { RK818_LDO8_ON_VSEL_REG, RK818_BOOST_LDO9_ON_VSEL_REG, }; + const static int ldo_set_slp_vol_base_addr[] = { RK818_LDO1_SLP_VSEL_REG, RK818_LDO2_SLP_VSEL_REG, @@ -98,23 +109,25 @@ const static int ldo_voltage_map[] = { 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200,3300, 3400, }; + const static int ldo3_voltage_map[] = { 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000,2100, 2200, 2500, }; + const static int ldo6_voltage_map[] = { 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000,2100, 2200, 2300,2400,2500, }; + const static int boost_voltage_map[] = { 4700,4800,4900,5000,5100,5200,5300,5400, }; -/////////////////////////////////rk818-irq.c -static inline int irq_to_rk818_irq(struct rk818 *rk818, +static inline int irq_to_rk818_irq(struct rk818_chip *chip, int irq) { - return (irq - rk818->chip_irq); + return (irq - chip->chip_irq); } /* @@ -128,37 +141,37 @@ static inline int irq_to_rk818_irq(struct rk818 *rk818, */ static irqreturn_t rk818_irq(int irq, void *irq_data) { - struct rk818 *rk818 = irq_data; + struct rk818_chip *chip = irq_data; u32 irq_sts; u32 irq_mask; u8 reg; int i, cur_irq; //printk(" rk818 irq %d \n",irq); - wake_lock(&rk818->irq_wake); - rk818_i2c_read(rk818, RK818_INT_STS_REG1, 1, ®); + wake_lock(&chip->irq_wake); + rk818_i2c_read(chip, RK818_INT_STS_REG1, 1, ®); irq_sts = reg; - rk818_i2c_read(rk818, RK818_INT_STS_REG2, 1, ®); + rk818_i2c_read(chip, RK818_INT_STS_REG2, 1, ®); irq_sts |= reg << 8; - rk818_i2c_read(rk818, RK818_INT_STS_MSK_REG1, 1, ®); + rk818_i2c_read(chip, RK818_INT_STS_MSK_REG1, 1, ®); irq_mask = reg; - rk818_i2c_read(rk818, RK818_INT_STS_MSK_REG2, 1, ®); + rk818_i2c_read(chip, RK818_INT_STS_MSK_REG2, 1, ®); irq_mask |= reg << 8; irq_sts &= ~irq_mask; if (!irq_sts) { - wake_unlock(&rk818->irq_wake); + wake_unlock(&chip->irq_wake); return IRQ_NONE; } - for (i = 0; i < rk818->irq_num; i++) { + for (i = 0; i < chip->irq_num; i++) { if (!(irq_sts & (1 << i))) continue; - cur_irq = irq_find_mapping(rk818->irq_domain, i); + cur_irq = irq_find_mapping(chip->irq_domain, i); if (cur_irq) handle_nested_irq(cur_irq); @@ -167,59 +180,57 @@ static irqreturn_t rk818_irq(int irq, void *irq_data) /* Write the STS register back to clear IRQs we handled */ reg = irq_sts & 0xFF; irq_sts >>= 8; - rk818_i2c_write(rk818, RK818_INT_STS_REG1, 1, reg); + rk818_i2c_write(chip, RK818_INT_STS_REG1, 1, reg); reg = irq_sts & 0xFF; - rk818_i2c_write(rk818, RK818_INT_STS_REG2, 1, reg); - wake_unlock(&rk818->irq_wake); + rk818_i2c_write(chip, RK818_INT_STS_REG2, 1, reg); + wake_unlock(&chip->irq_wake); return IRQ_HANDLED; } static void rk818_irq_lock(struct irq_data *data) { - struct rk818 *rk818 = irq_data_get_irq_chip_data(data); + struct rk818_chip *chip = irq_data_get_irq_chip_data(data); - mutex_lock(&rk818->irq_lock); + mutex_lock(&chip->irq_lock); } static void rk818_irq_sync_unlock(struct irq_data *data) { - struct rk818 *rk818 = irq_data_get_irq_chip_data(data); + struct rk818_chip *chip = irq_data_get_irq_chip_data(data); u32 reg_mask; u8 reg; - rk818_i2c_read(rk818, RK818_INT_STS_MSK_REG1, 1, ®); + rk818_i2c_read(chip, RK818_INT_STS_MSK_REG1, 1, ®); reg_mask = reg; - rk818_i2c_read(rk818, RK818_INT_STS_MSK_REG2, 1, ®); + rk818_i2c_read(chip, RK818_INT_STS_MSK_REG2, 1, ®); reg_mask |= reg << 8; - if (rk818->irq_mask != reg_mask) { - reg = rk818->irq_mask & 0xff; - // rk818_i2c_write(rk818, RK818_INT_STS_MSK_REG1, 1, reg); - reg = rk818->irq_mask >> 8 & 0xff; - // rk818_i2c_write(rk818, RK818_INT_STS_MSK_REG2, 1, reg); + if (chip->irq_mask != reg_mask) { + reg = chip->irq_mask & 0xff; + reg = chip->irq_mask >> 8 & 0xff; } - mutex_unlock(&rk818->irq_lock); + mutex_unlock(&chip->irq_lock); } static void rk818_irq_enable(struct irq_data *data) { - struct rk818 *rk818 = irq_data_get_irq_chip_data(data); + struct rk818_chip *chip = irq_data_get_irq_chip_data(data); - rk818->irq_mask &= ~( 1 << irq_to_rk818_irq(rk818, data->irq)); + chip->irq_mask &= ~( 1 << irq_to_rk818_irq(chip, data->irq)); } static void rk818_irq_disable(struct irq_data *data) { - struct rk818 *rk818 = irq_data_get_irq_chip_data(data); + struct rk818_chip *chip = irq_data_get_irq_chip_data(data); - rk818->irq_mask |= ( 1 << irq_to_rk818_irq(rk818, data->irq)); + chip->irq_mask |= ( 1 << irq_to_rk818_irq(chip, data->irq)); } #ifdef CONFIG_PM_SLEEP static int rk818_irq_set_wake(struct irq_data *data, unsigned int enable) { - struct rk818 *rk818 = irq_data_get_irq_chip_data(data); - return irq_set_irq_wake(rk818->chip_irq, enable); + struct rk818_chip *chip = irq_data_get_irq_chip_data(data); + return irq_set_irq_wake(chip->chip_irq, enable); } #else #define rk818_irq_set_wake NULL @@ -237,9 +248,9 @@ static struct irq_chip rk818_irq_chip = { static int rk818_irq_domain_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hw) { - struct rk818 *rk818 = d->host_data; + struct rk818_chip *chip = d->host_data; - irq_set_chip_data(irq, rk818); + irq_set_chip_data(irq, chip); irq_set_chip_and_handler(irq, &rk818_irq_chip, handle_edge_irq); irq_set_nested_thread(irq, 1); #ifdef CONFIG_ARM @@ -254,45 +265,44 @@ static struct irq_domain_ops rk818_irq_domain_ops = { .map = rk818_irq_domain_map, }; -int rk818_irq_init(struct rk818 *rk818, int irq,struct rk818_board *pdata) +int rk818_irq_init(struct rk818_chip *chip, int irq,struct rk818_chip_board *pdata) { struct irq_domain *domain; int ret,val,irq_type,flags; u8 reg; - // printk("%s,line=%d\n", __func__,__LINE__); if (!irq) { - dev_warn(rk818->dev, "No interrupt support, no core IRQ\n"); + dev_warn(chip->dev, "No interrupt support, no core IRQ\n"); return 0; } /* Clear unattended interrupts */ - rk818_i2c_read(rk818, RK818_INT_STS_REG1, 1, ®); - rk818_i2c_write(rk818, RK818_INT_STS_REG1, 1, reg); - rk818_i2c_read(rk818, RK818_INT_STS_REG2, 1, ®); - rk818_i2c_write(rk818, RK818_INT_STS_REG2, 1, reg); - rk818_i2c_read(rk818, RK818_RTC_STATUS_REG, 1, ®); - rk818_i2c_write(rk818, RK818_RTC_STATUS_REG, 1, reg);//clear alarm and timer interrupt + rk818_i2c_read(chip, RK818_INT_STS_REG1, 1, ®); + rk818_i2c_write(chip, RK818_INT_STS_REG1, 1, reg); + rk818_i2c_read(chip, RK818_INT_STS_REG2, 1, ®); + rk818_i2c_write(chip, RK818_INT_STS_REG2, 1, reg); + rk818_i2c_read(chip, RK818_RTC_STATUS_REG, 1, ®); + rk818_i2c_write(chip, RK818_RTC_STATUS_REG, 1, reg);//clear alarm and timer interrupt /* Mask top level interrupts */ - rk818->irq_mask = 0xFFFFFF; - mutex_init(&rk818->irq_lock); - wake_lock_init(&rk818->irq_wake, WAKE_LOCK_SUSPEND, "rk818_irq_wake"); - rk818->irq_num = RK818_NUM_IRQ; - rk818->irq_gpio = pdata->irq_gpio; - if (rk818->irq_gpio && !rk818->chip_irq) { - rk818->chip_irq = gpio_to_irq(rk818->irq_gpio); + chip->irq_mask = 0xFFFFFF; + mutex_init(&chip->irq_lock); + wake_lock_init(&chip->irq_wake, WAKE_LOCK_SUSPEND, "rk818_irq_wake"); + chip->irq_num = RK818_NUM_IRQ; + chip->irq_gpio = pdata->irq_gpio; + if (chip->irq_gpio && !chip->chip_irq) { + chip->chip_irq = gpio_to_irq(chip->irq_gpio); - if (rk818->irq_gpio) { - ret = gpio_request(rk818->irq_gpio, "rk818_pmic_irq"); + if (chip->irq_gpio) { + ret = devm_gpio_request(chip->dev, chip->irq_gpio, "rk818_pmic_irq"); if (ret < 0) { - dev_err(rk818->dev, + dev_err(chip->dev, "Failed to request gpio %d with ret:" - "%d\n", rk818->irq_gpio, ret); + "%d\n", chip->irq_gpio, ret); return IRQ_NONE; } - gpio_direction_input(rk818->irq_gpio); - val = gpio_get_value(rk818->irq_gpio); + gpio_direction_input(chip->irq_gpio); + val = gpio_get_value(chip->irq_gpio); if (val){ irq_type = IRQ_TYPE_LEVEL_LOW; flags = IRQF_TRIGGER_FALLING; @@ -301,36 +311,33 @@ int rk818_irq_init(struct rk818 *rk818, int irq,struct rk818_board *pdata) irq_type = IRQ_TYPE_LEVEL_HIGH; flags = IRQF_TRIGGER_RISING; } - gpio_free(rk818->irq_gpio); pr_info("%s: rk818_pmic_irq=%x\n", __func__, val); } } domain = irq_domain_add_linear(NULL, RK818_NUM_IRQ, - &rk818_irq_domain_ops, rk818); + &rk818_irq_domain_ops, chip); if (!domain) { - dev_err(rk818->dev, "could not create irq domain\n"); + dev_err(chip->dev, "could not create irq domain\n"); return -ENODEV; } - rk818->irq_domain = domain; + chip->irq_domain = domain; - ret = request_threaded_irq(rk818->chip_irq, NULL, rk818_irq, flags | IRQF_ONESHOT, "rk818", rk818); + ret = devm_request_threaded_irq(chip->dev, chip->chip_irq, NULL, rk818_irq, flags | IRQF_ONESHOT, "rk818", chip); - irq_set_irq_type(rk818->chip_irq, irq_type); - enable_irq_wake(rk818->chip_irq); + irq_set_irq_type(chip->chip_irq, irq_type); + enable_irq_wake(chip->chip_irq); if (ret != 0) - dev_err(rk818->dev, "Failed to request IRQ: %d\n", ret); + dev_err(chip->dev, "Failed to request IRQ: %d\n", ret); return ret; } -int rk818_irq_exit(struct rk818 *rk818) +int rk818_irq_exit(struct rk818_chip *chip) { - if (rk818->chip_irq) - free_irq(rk818->chip_irq, rk818); + printk("%s, %d\n", __FUNCTION__, __LINE__); return 0; } -/////////////////////////////////rk818-irq.c static int rk818_ldo_list_voltage(struct regulator_dev *dev, unsigned index) { @@ -351,14 +358,15 @@ static int rk818_ldo_list_voltage(struct regulator_dev *dev, unsigned index) return 1000 * ldo_voltage_map[index]; } } + static int rk818_ldo_is_enabled(struct regulator_dev *dev) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int ldo= rdev_get_id(dev) - RK818_LDO1; u16 val; if (ldo == 8){ - val = rk818_reg_read(rk818, RK818_DCDC_EN_REG); //ldo9 + val = rk818_reg_read(chip, RK818_DCDC_EN_REG); //ldo9 if (val < 0) return val; if (val & (1 << 5)) @@ -366,7 +374,7 @@ static int rk818_ldo_is_enabled(struct regulator_dev *dev) else return 0; } - val = rk818_reg_read(rk818, RK818_LDO_EN_REG); + val = rk818_reg_read(chip, RK818_LDO_EN_REG); if (val < 0) return val; if (val & (1 << ldo)) @@ -374,48 +382,51 @@ static int rk818_ldo_is_enabled(struct regulator_dev *dev) else return 0; } + static int rk818_ldo_enable(struct regulator_dev *dev) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int ldo= rdev_get_id(dev) - RK818_LDO1; if (ldo == 8) - rk818_set_bits(rk818, RK818_DCDC_EN_REG, 1 << 5, 1 << 5); //ldo9 + rk818_set_bits(chip, RK818_DCDC_EN_REG, 1 << 5, 1 << 5); //ldo9 else if (ldo ==9) - rk818_set_bits(rk818, RK818_DCDC_EN_REG, 1 << 6, 1 << 6); //ldo10 switch + rk818_set_bits(chip, RK818_DCDC_EN_REG, 1 << 6, 1 << 6); //ldo10 switch else - rk818_set_bits(rk818, RK818_LDO_EN_REG, 1 << ldo, 1 << ldo); + rk818_set_bits(chip, RK818_LDO_EN_REG, 1 << ldo, 1 << ldo); return 0; } + static int rk818_ldo_disable(struct regulator_dev *dev) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int ldo= rdev_get_id(dev) - RK818_LDO1; if (ldo == 8) - rk818_set_bits(rk818, RK818_DCDC_EN_REG, 1 << 5, 1 << 0); //ldo9 + rk818_set_bits(chip, RK818_DCDC_EN_REG, 1 << 5, 1 << 0); //ldo9 else if(ldo ==9) - rk818_set_bits(rk818, RK818_DCDC_EN_REG, 1 << 6, 1 << 0); //ldo10 switch + rk818_set_bits(chip, RK818_DCDC_EN_REG, 1 << 6, 1 << 0); //ldo10 switch else - rk818_set_bits(rk818, RK818_LDO_EN_REG, 1 << ldo, 0); + rk818_set_bits(chip, RK818_LDO_EN_REG, 1 << ldo, 0); return 0; } + static int rk818_ldo_get_voltage(struct regulator_dev *dev) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int ldo= rdev_get_id(dev) - RK818_LDO1; u16 reg = 0; int val; if (ldo ==9){ - reg = rk818_reg_read(rk818,rk818_BUCK_SET_VOL_REG(3)); + reg = rk818_reg_read(chip,rk818_BUCK_SET_VOL_REG(3)); reg &= BUCK_VOL_MASK; val = 1000 * buck4_voltage_map[reg]; } else{ - reg = rk818_reg_read(rk818,rk818_LDO_SET_VOL_REG(ldo)); + reg = rk818_reg_read(chip,rk818_LDO_SET_VOL_REG(ldo)); if (ldo == 8){ reg &= LDO9_VOL_MASK; } @@ -434,36 +445,39 @@ static int rk818_ldo_get_voltage(struct regulator_dev *dev) } return val; } + static int rk818_ldo_suspend_enable(struct regulator_dev *dev) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int ldo= rdev_get_id(dev) - RK818_LDO1; if (ldo == 8) - return rk818_set_bits(rk818, RK818_SLEEP_SET_OFF_REG1, 1 << 5, 0); //ldo9 + return rk818_set_bits(chip, RK818_SLEEP_SET_OFF_REG1, 1 << 5, 0); //ldo9 else if (ldo ==9) - return rk818_set_bits(rk818, RK818_SLEEP_SET_OFF_REG1, 1 << 6, 0); //ldo10 switch + return rk818_set_bits(chip, RK818_SLEEP_SET_OFF_REG1, 1 << 6, 0); //ldo10 switch else - return rk818_set_bits(rk818, RK818_SLEEP_SET_OFF_REG2, 1 << ldo, 0); + return rk818_set_bits(chip, RK818_SLEEP_SET_OFF_REG2, 1 << ldo, 0); } + static int rk818_ldo_suspend_disable(struct regulator_dev *dev) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int ldo= rdev_get_id(dev) - RK818_LDO1; if (ldo == 8) - return rk818_set_bits(rk818, RK818_SLEEP_SET_OFF_REG1, 1 << 5, 1 << 5); //ldo9 + return rk818_set_bits(chip, RK818_SLEEP_SET_OFF_REG1, 1 << 5, 1 << 5); //ldo9 else if (ldo ==9) - return rk818_set_bits(rk818, RK818_SLEEP_SET_OFF_REG1, 1 << 6, 1 << 6); //ldo10 switch + return rk818_set_bits(chip, RK818_SLEEP_SET_OFF_REG1, 1 << 6, 1 << 6); //ldo10 switch else - return rk818_set_bits(rk818, RK818_SLEEP_SET_OFF_REG2, 1 << ldo, 1 << ldo); + return rk818_set_bits(chip, RK818_SLEEP_SET_OFF_REG2, 1 << ldo, 1 << ldo); } + static int rk818_ldo_set_sleep_voltage(struct regulator_dev *dev, int uV) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int ldo= rdev_get_id(dev) - RK818_LDO1; const int *vol_map = ldo_voltage_map; int min_vol = uV / 1000; @@ -492,10 +506,10 @@ static int rk818_ldo_set_sleep_voltage(struct regulator_dev *dev, } if (ldo == 8){ - ret = rk818_set_bits(rk818, rk818_LDO_SET_SLP_VOL_REG(ldo),LDO9_VOL_MASK, val); + ret = rk818_set_bits(chip, rk818_LDO_SET_SLP_VOL_REG(ldo),LDO9_VOL_MASK, val); } else - ret = rk818_set_bits(rk818, rk818_LDO_SET_SLP_VOL_REG(ldo),LDO_VOL_MASK, val); + ret = rk818_set_bits(chip, rk818_LDO_SET_SLP_VOL_REG(ldo),LDO_VOL_MASK, val); return ret; } @@ -503,7 +517,7 @@ static int rk818_ldo_set_sleep_voltage(struct regulator_dev *dev, static int rk818_ldo_set_voltage(struct regulator_dev *dev, int min_uV, int max_uV,unsigned *selector) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int ldo= rdev_get_id(dev) - RK818_LDO1; const int *vol_map; int min_vol = min_uV / 1000; @@ -533,10 +547,10 @@ static int rk818_ldo_set_voltage(struct regulator_dev *dev, } if (ldo == 8){ - ret = rk818_set_bits(rk818, rk818_LDO_SET_VOL_REG(ldo),LDO9_VOL_MASK, val); + ret = rk818_set_bits(chip, rk818_LDO_SET_VOL_REG(ldo),LDO9_VOL_MASK, val); } else - ret = rk818_set_bits(rk818, rk818_LDO_SET_VOL_REG(ldo),LDO_VOL_MASK, val); + ret = rk818_set_bits(chip, rk818_LDO_SET_VOL_REG(ldo),LDO_VOL_MASK, val); return ret; @@ -583,11 +597,11 @@ static int rk818_dcdc_list_voltage(struct regulator_dev *dev, unsigned selector) static int rk818_dcdc_is_enabled(struct regulator_dev *dev) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int buck = rdev_get_id(dev) - RK818_DCDC1; u16 val; - val = rk818_reg_read(rk818, RK818_DCDC_EN_REG); + val = rk818_reg_read(chip, RK818_DCDC_EN_REG); if (val < 0) return val; if (val & (1 << buck)) @@ -598,29 +612,29 @@ static int rk818_dcdc_is_enabled(struct regulator_dev *dev) static int rk818_dcdc_enable(struct regulator_dev *dev) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int buck = rdev_get_id(dev) - RK818_DCDC1; - return rk818_set_bits(rk818, RK818_DCDC_EN_REG, 1 << buck, 1 << buck); + return rk818_set_bits(chip, RK818_DCDC_EN_REG, 1 << buck, 1 << buck); } static int rk818_dcdc_disable(struct regulator_dev *dev) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int buck = rdev_get_id(dev) - RK818_DCDC1; - return rk818_set_bits(rk818, RK818_DCDC_EN_REG, 1 << buck , 0); + return rk818_set_bits(chip, RK818_DCDC_EN_REG, 1 << buck , 0); } static int rk818_dcdc_get_voltage(struct regulator_dev *dev) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int buck = rdev_get_id(dev) - RK818_DCDC1; u16 reg = 0; int val; - reg = rk818_reg_read(rk818,rk818_BUCK_SET_VOL_REG(buck)); + reg = rk818_reg_read(chip,rk818_BUCK_SET_VOL_REG(buck)); reg &= BUCK_VOL_MASK; val = rk818_dcdc_list_voltage(dev,reg); @@ -656,7 +670,7 @@ static int rk818_dcdc_select_min_voltage(struct regulator_dev *dev, static int rk818_dcdc_set_voltage(struct regulator_dev *dev, int min_uV, int max_uV,unsigned *selector) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int buck = rdev_get_id(dev) - RK818_DCDC1; u16 val; int ret = 0; @@ -665,17 +679,17 @@ static int rk818_dcdc_set_voltage(struct regulator_dev *dev, return 0; }else if (buck==3){ val = rk818_dcdc_select_min_voltage(dev,min_uV,max_uV,buck); - ret = rk818_set_bits(rk818, rk818_BUCK_SET_VOL_REG(buck), BUCK_VOL_MASK, val); + ret = rk818_set_bits(chip, rk818_BUCK_SET_VOL_REG(buck), BUCK_VOL_MASK, val); } val = rk818_dcdc_select_min_voltage(dev,min_uV,max_uV,buck); - ret = rk818_set_bits(rk818, rk818_BUCK_SET_VOL_REG(buck), BUCK_VOL_MASK, val); + ret = rk818_set_bits(chip, rk818_BUCK_SET_VOL_REG(buck), BUCK_VOL_MASK, val); return ret; } static int rk818_dcdc_set_sleep_voltage(struct regulator_dev *dev, int uV) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int buck = rdev_get_id(dev) - RK818_DCDC1; u16 val; int ret = 0; @@ -684,18 +698,18 @@ static int rk818_dcdc_set_sleep_voltage(struct regulator_dev *dev, return 0; }else{ val = rk818_dcdc_select_min_voltage(dev,uV,uV,buck); - ret = rk818_set_bits(rk818, rk818_BUCK_SET_SLP_VOL_REG(buck) , BUCK_VOL_MASK, val); + ret = rk818_set_bits(chip, rk818_BUCK_SET_SLP_VOL_REG(buck) , BUCK_VOL_MASK, val); } return ret; } static unsigned int rk818_dcdc_get_mode(struct regulator_dev *dev) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int buck = rdev_get_id(dev) - RK818_DCDC1; u16 mask = 0x80; u16 val; - val = rk818_reg_read(rk818, rk818_BUCK_SET_VOL_REG(buck)); + val = rk818_reg_read(chip, rk818_BUCK_SET_VOL_REG(buck)); if (val < 0) { return val; } @@ -709,15 +723,15 @@ static unsigned int rk818_dcdc_get_mode(struct regulator_dev *dev) static int rk818_dcdc_set_mode(struct regulator_dev *dev, unsigned int mode) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int buck = rdev_get_id(dev) - RK818_DCDC1; u16 mask = 0x80; switch(mode) { case REGULATOR_MODE_FAST: - return rk818_set_bits(rk818, rk818_BUCK_SET_VOL_REG(buck), mask, mask); + return rk818_set_bits(chip, rk818_BUCK_SET_VOL_REG(buck), mask, mask); case REGULATOR_MODE_NORMAL: - return rk818_set_bits(rk818, rk818_BUCK_SET_VOL_REG(buck), mask, 0); + return rk818_set_bits(chip, rk818_BUCK_SET_VOL_REG(buck), mask, 0); default: printk("error:pmu_rk818 only powersave and pwm mode\n"); return -EINVAL; @@ -742,33 +756,33 @@ static int rk818_dcdc_set_voltage_time_sel(struct regulator_dev *dev, unsigned static int rk818_dcdc_suspend_enable(struct regulator_dev *dev) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int buck = rdev_get_id(dev) - RK818_DCDC1; - return rk818_set_bits(rk818, RK818_SLEEP_SET_OFF_REG1, 1 << buck, 0); + return rk818_set_bits(chip, RK818_SLEEP_SET_OFF_REG1, 1 << buck, 0); } static int rk818_dcdc_suspend_disable(struct regulator_dev *dev) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int buck = rdev_get_id(dev) - RK818_DCDC1; - return rk818_set_bits(rk818, RK818_SLEEP_SET_OFF_REG1, 1 << buck , 1 << buck); + return rk818_set_bits(chip, RK818_SLEEP_SET_OFF_REG1, 1 << buck , 1 << buck); } static int rk818_dcdc_set_suspend_mode(struct regulator_dev *dev, unsigned int mode) { - struct rk818 *rk818 = rdev_get_drvdata(dev); + struct rk818_chip *chip = rdev_get_drvdata(dev); int buck = rdev_get_id(dev) - RK818_DCDC1; u16 mask = 0x80; switch(mode) { case REGULATOR_MODE_FAST: - return rk818_set_bits(rk818, (rk818_BUCK_SET_VOL_REG(buck) + 0x01), mask, mask); + return rk818_set_bits(chip, (rk818_BUCK_SET_VOL_REG(buck) + 0x01), mask, mask); case REGULATOR_MODE_NORMAL: - return rk818_set_bits(rk818, (rk818_BUCK_SET_VOL_REG(buck) + 0x01), mask, 0); + return rk818_set_bits(chip, (rk818_BUCK_SET_VOL_REG(buck) + 0x01), mask, 0); default: printk("error:pmu_rk818 only powersave and pwm mode\n"); return -EINVAL; @@ -911,146 +925,138 @@ static struct regulator_desc regulators[] = { }; -int rk818_i2c_read(struct rk818 *rk818, char reg, int count,u8 *dest) +int rk818_i2c_read(struct rk818_chip *chip, char reg, int count,u8 *dest) { - struct i2c_client *i2c = rk818->i2c; + struct i2c_client *client = chip->client; int ret; - struct i2c_adapter *adap; struct i2c_msg msgs[2]; - if(!i2c) + if(!client) return ret; if (count != 1) return -EIO; - adap = i2c->adapter; - - msgs[0].addr = i2c->addr; + msgs[0].addr = client->addr; msgs[0].buf = ® msgs[0].flags = 0; msgs[0].len = 1; msgs[0].scl_rate = 200*1000; msgs[1].buf = dest; - msgs[1].addr = i2c->addr; + msgs[1].addr = client->addr; msgs[1].flags = I2C_M_RD; msgs[1].len = count; msgs[1].scl_rate = RK818_I2C_ADDR_RATE; - ret = i2c_transfer(adap, msgs, 2); + ret = i2c_transfer(client->adapter, msgs, 2); return 0; } -int rk818_i2c_write(struct rk818 *rk818, char reg, int count, const u8 src) +int rk818_i2c_write(struct rk818_chip *chip, char reg, int count, const u8 src) { int ret=-1; - struct i2c_client *i2c = rk818->i2c; - struct i2c_adapter *adap; + struct i2c_client *client = chip->client; struct i2c_msg msg; char tx_buf[2]; - if(!i2c) + if(!client) return ret; if (count != 1) return -EIO; - adap = i2c->adapter; tx_buf[0] = reg; tx_buf[1] = src; - msg.addr = i2c->addr; + msg.addr = client->addr; msg.buf = &tx_buf[0]; msg.len = 1 +1; - msg.flags = i2c->flags; + msg.flags = client->flags; msg.scl_rate = RK818_I2C_ADDR_RATE; - ret = i2c_transfer(adap, &msg, 1); + ret = i2c_transfer(client->adapter, &msg, 1); return ret; } -u8 rk818_reg_read(struct rk818 *rk818, u8 reg) +u8 rk818_reg_read(struct rk818_chip *chip, u8 reg) { u8 val = 0; - mutex_lock(&rk818->io_lock); + mutex_lock(&chip->io_lock); - rk818_i2c_read(rk818, reg, 1, &val); + rk818_i2c_read(chip, reg, 1, &val); - mutex_unlock(&rk818->io_lock); + mutex_unlock(&chip->io_lock); return val & 0xff; } EXPORT_SYMBOL_GPL(rk818_reg_read); -int rk818_reg_write(struct rk818 *rk818, u8 reg, u8 val) +int rk818_reg_write(struct rk818_chip *chip, u8 reg, u8 val) { int err =0; - mutex_lock(&rk818->io_lock); + mutex_lock(&chip->io_lock); - err = rk818_i2c_write(rk818, reg, 1,val); + err = rk818_i2c_write(chip, reg, 1,val); if (err < 0) - dev_err(rk818->dev, "Write for reg 0x%x failed\n", reg); + dev_err(chip->dev, "Write for reg 0x%x failed\n", reg); - mutex_unlock(&rk818->io_lock); + mutex_unlock(&chip->io_lock); return err; } EXPORT_SYMBOL_GPL(rk818_reg_write); -int rk818_set_bits(struct rk818 *rk818, u8 reg, u8 mask, u8 val) +int rk818_set_bits(struct rk818_chip *chip, u8 reg, u8 mask, u8 val) { u8 tmp; int ret; - mutex_lock(&rk818->io_lock); + mutex_lock(&chip->io_lock); - ret = rk818_i2c_read(rk818, reg, 1, &tmp); + ret = rk818_i2c_read(chip, reg, 1, &tmp); tmp = (tmp & ~mask) | val; if (ret == 0) { - ret = rk818_i2c_write(rk818, reg, 1, tmp); + ret = rk818_i2c_write(chip, reg, 1, tmp); } - rk818_i2c_read(rk818, reg, 1, &tmp); - mutex_unlock(&rk818->io_lock); + rk818_i2c_read(chip, reg, 1, &tmp); + mutex_unlock(&chip->io_lock); return 0;//ret; } EXPORT_SYMBOL_GPL(rk818_set_bits); -int rk818_clear_bits(struct rk818 *rk818, u8 reg, u8 mask) +int rk818_clear_bits(struct rk818_chip *chip, u8 reg, u8 mask) { u8 data; int err; - mutex_lock(&rk818->io_lock); - err = rk818_i2c_read(rk818, reg, 1, &data); + mutex_lock(&chip->io_lock); + err = rk818_i2c_read(chip, reg, 1, &data); if (err <0) { - dev_err(rk818->dev, "read from reg %x failed\n", reg); + dev_err(chip->dev, "read from reg %x failed\n", reg); goto out; } data &= ~mask; - err = rk818_i2c_write(rk818, reg, 1, data); + err = rk818_i2c_write(chip, reg, 1, data); if (err <0) - dev_err(rk818->dev, "write to reg %x failed\n", reg); + dev_err(chip->dev, "write to reg %x failed\n", reg); out: - mutex_unlock(&rk818->io_lock); + mutex_unlock(&chip->io_lock); return err; } EXPORT_SYMBOL_GPL(rk818_clear_bits); -#ifdef CONFIG_OF static struct of_device_id rk818_of_match[] = { { .compatible = "rockchip,rk818"}, { }, }; MODULE_DEVICE_TABLE(of, rk818_of_match); -#endif -#ifdef CONFIG_OF static struct of_regulator_match rk818_reg_matches[] = { { .name = "rk818_dcdc1", .driver_data = (void *)0 }, { .name = "rk818_dcdc2", .driver_data = (void *)1 }, @@ -1068,13 +1074,13 @@ static struct of_regulator_match rk818_reg_matches[] = { { .name = "rk818_ldo10", .driver_data = (void *)13 }, }; -static struct rk818_board *rk818_parse_dt(struct rk818 *rk818) +static struct rk818_chip_board *rk818_parse_dt(struct rk818_chip *chip) { - struct rk818_board *pdata; + struct rk818_chip_board *pdata; struct device_node *regs,*rk818_pmic_np; int i, count; - rk818_pmic_np = of_node_get(rk818->dev->of_node); + rk818_pmic_np = of_node_get(chip->dev->of_node); if (!rk818_pmic_np) { printk("could not find pmic sub-node\n"); return NULL; @@ -1084,13 +1090,13 @@ static struct rk818_board *rk818_parse_dt(struct rk818 *rk818) if (!regs) return NULL; - count = of_regulator_match(rk818->dev, regs, rk818_reg_matches, + count = of_regulator_match(chip->dev, regs, rk818_reg_matches, rk818_NUM_REGULATORS); of_node_put(regs); if ((count < 0) || (count > rk818_NUM_REGULATORS)) return NULL; - pdata = devm_kzalloc(rk818->dev, sizeof(*pdata), GFP_KERNEL); + pdata = devm_kzalloc(chip->dev, sizeof(*pdata), GFP_KERNEL); if (!pdata) return NULL; @@ -1101,7 +1107,7 @@ static struct rk818_board *rk818_parse_dt(struct rk818 *rk818) pdata->rk818_init_data[i] = rk818_reg_matches[i].init_data; pdata->of_node[i] = rk818_reg_matches[i].of_node; } - pdata->irq = rk818->chip_irq; + pdata->irq = chip->chip_irq; pdata->irq_base = -1; pdata->irq_gpio = of_get_named_gpio(rk818_pmic_np,"gpios",0); @@ -1115,71 +1121,64 @@ static struct rk818_board *rk818_parse_dt(struct rk818 *rk818) printk("invalid gpio: %d\n", pdata->pmic_sleep_gpio); } pdata->pmic_sleep = true; - pdata->pm_off = of_property_read_bool(rk818_pmic_np,"rk818,system-power-controller"); + pdata->pm_off = of_property_read_bool(rk818_pmic_np,"chip,system-power-controller"); return pdata; } -#else -static struct rk818_board *rk818_parse_dt(struct i2c_client *i2c) -{ - return NULL; -} -#endif - -static int rk818_pre_init(struct rk818 *rk818) +static int rk818_pre_init(struct rk818_chip *chip) { int ret,val; printk("%s,line=%d\n", __func__,__LINE__); - ret = rk818_set_bits(rk818, 0xa1, (0xF<<0),(0x7)); - ret = rk818_set_bits(rk818, 0xa1,(0x7<<4),(0x7<<4)); //close charger when usb low then 3.4V - ret = rk818_set_bits(rk818, 0x52,(0x1<<1),(0x1<<1)); //no action when vref - ret = rk818_set_bits(rk818, 0x52,(0x1<<0),(0x1<<0)); //enable HDMI 5V + ret = rk818_set_bits(chip, 0xa1, (0xF<<0),(0x7)); + ret = rk818_set_bits(chip, 0xa1,(0x7<<4),(0x7<<4)); //close charger when usb low then 3.4V + ret = rk818_set_bits(chip, 0x52,(0x1<<1),(0x1<<1)); //no action when vref + ret = rk818_set_bits(chip, 0x52,(0x1<<0),(0x1<<0)); //enable HDMI 5V - /*******enable switch and boost***********/ - val = rk818_reg_read(rk818,RK818_DCDC_EN_REG); + /* enable switch and boost */ + val = rk818_reg_read(chip,RK818_DCDC_EN_REG); val |= (0x3 << 5); //enable switch1/2 val |= (0x1 << 4); //enable boost - ret = rk818_reg_write(rk818,RK818_DCDC_EN_REG,val); + ret = rk818_reg_write(chip,RK818_DCDC_EN_REG,val); if (ret <0) { printk(KERN_ERR "Unable to write RK818_DCDC_EN_REG reg\n"); return ret; } - /****************set vbat low **********/ - val = rk818_reg_read(rk818,RK818_VB_MON_REG); + /* set vbat low */ + val = rk818_reg_read(chip,RK818_VB_MON_REG); val &=(~(VBAT_LOW_VOL_MASK | VBAT_LOW_ACT_MASK)); val |= (RK818_VBAT_LOW_3V0 | EN_VABT_LOW_SHUT_DOWN); - ret = rk818_reg_write(rk818,RK818_VB_MON_REG,val); + ret = rk818_reg_write(chip,RK818_VB_MON_REG,val); if (ret <0) { printk(KERN_ERR "Unable to write RK818_VB_MON_REG reg\n"); return ret; } - /**********mask int****************/ - val = rk818_reg_read(rk818,RK818_INT_STS_MSK_REG1); + /* mask int */ + val = rk818_reg_read(chip,RK818_INT_STS_MSK_REG1); val |= (0x1<<0); //mask vout_lo_int - ret = rk818_reg_write(rk818,RK818_INT_STS_MSK_REG1,val); + ret = rk818_reg_write(chip,RK818_INT_STS_MSK_REG1,val); if (ret <0) { printk(KERN_ERR "Unable to write RK818_INT_STS_MSK_REG1 reg\n"); return ret; } - /**********enable clkout2****************/ - ret = rk818_reg_write(rk818,RK818_CLK32OUT_REG,0x01); + /* enable clkout2 */ + ret = rk818_reg_write(chip,RK818_CLK32OUT_REG,0x01); if (ret <0) { printk(KERN_ERR "Unable to write RK818_CLK32OUT_REG reg\n"); return ret; } - ret = rk818_clear_bits(rk818, RK818_INT_STS_MSK_REG1,(0x3<<5)); //open rtc int when power on - ret = rk818_set_bits(rk818, RK818_RTC_INT_REG,(0x1<<3),(0x1<<3)); //open rtc int when power on + ret = rk818_clear_bits(chip, RK818_INT_STS_MSK_REG1,(0x3<<5)); //open rtc int when power on + ret = rk818_set_bits(chip, RK818_RTC_INT_REG,(0x1<<3),(0x1<<3)); //open rtc int when power on - /*****disable otg and boost when in sleep mode****/ - val = rk818_reg_read(rk818, RK818_SLEEP_SET_OFF_REG1); + /* disable otg and boost when in sleep mode */ + val = rk818_reg_read(chip, RK818_SLEEP_SET_OFF_REG1); val |= ((0x1 << 7) | (0x1 << 4)); - ret = rk818_reg_write(rk818, RK818_SLEEP_SET_OFF_REG1, val); + ret = rk818_reg_write(chip, RK818_SLEEP_SET_OFF_REG1, val); if (ret < 0) { pr_err("Unable to write RK818_SLEEP_SET_OFF_REG1 reg\n"); return ret; @@ -1188,10 +1187,10 @@ static int rk818_pre_init(struct rk818 *rk818) return 0; } -static int rk818_i2c_probe(struct i2c_client *i2c, const struct i2c_device_id *id) +static int rk818_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id) { - struct rk818 *rk818; - struct rk818_board *pdev; + struct rk818_chip *chip; + struct rk818_chip_board *pdata; const struct of_device_id *match; struct regulator_config config = { }; struct regulator_dev *rk818_rdev; @@ -1199,105 +1198,102 @@ static int rk818_i2c_probe(struct i2c_client *i2c, const struct i2c_device_id * const char *rail_name = NULL; int ret, i = 0; - printk("%s,line=%d\n", __func__,__LINE__); + printk("%s, %d\n", __FUNCTION__, __LINE__); - if (i2c->dev.of_node) { - match = of_match_device(rk818_of_match, &i2c->dev); + /* 检查DT */ + if (client->dev.of_node) { + match = of_match_device(rk818_of_match, &client->dev); if (!match) { - dev_err(&i2c->dev,"Failed to find matching dt id\n"); + dev_err(&client->dev,"Failed to find matching dt id\n"); return -EINVAL; } } - rk818 = devm_kzalloc(&i2c->dev,sizeof(struct rk818), GFP_KERNEL); - if (rk818 == NULL) { + /* 为自定义结构提分配数据空间 */ + chip = devm_kzalloc(&client->dev,sizeof(struct rk818_chip), GFP_KERNEL); + if (chip == NULL) ret = -ENOMEM; - } - rk818->i2c = i2c; - rk818->dev = &i2c->dev; - i2c_set_clientdata(i2c, rk818); - mutex_init(&rk818->io_lock); + /* 设置chip */ + chip->client = client; + chip->dev = &client->dev; - ret = rk818_reg_read(rk818,0x2f); + /* 设置client 的driver data 指向chip */ + i2c_set_clientdata(client, chip); + + mutex_init(&chip->io_lock); + + ret = rk818_reg_read(chip,0x2f); if ((ret < 0) || (ret == 0xff)){ printk("The device is not rk818 %d\n",ret); } - ret = rk818_pre_init(rk818); - if (ret < 0){ + ret = rk818_pre_init(chip); + if (ret < 0) printk("The rk818_pre_init failed %d\n",ret); - } - if (rk818->dev->of_node) - pdev = rk818_parse_dt(rk818); + /* 解析DT */ + if (chip->dev->of_node) + pdata = rk818_parse_dt(chip); - /******************************set sleep vol & dcdc mode******************/ -#ifdef CONFIG_OF - rk818->pmic_sleep_gpio = pdev->pmic_sleep_gpio; - if (rk818->pmic_sleep_gpio) { - ret = gpio_request(rk818->pmic_sleep_gpio, "rk818_pmic_sleep"); + /* set sleep vol and dcdc mode */ + chip->pmic_sleep_gpio = pdata->pmic_sleep_gpio; + if (chip->pmic_sleep_gpio) { + ret = devm_gpio_request(chip->dev, chip->pmic_sleep_gpio, "rk818_pmic_sleep"); if (ret < 0) { - dev_err(rk818->dev,"Failed to request gpio %d with ret:""%d\n", rk818->pmic_sleep_gpio, ret); + dev_err(chip->dev,"Failed to request gpio %d with ret:""%d\n", chip->pmic_sleep_gpio, ret); return IRQ_NONE; } - gpio_direction_output(rk818->pmic_sleep_gpio,0); - ret = gpio_get_value(rk818->pmic_sleep_gpio); - gpio_free(rk818->pmic_sleep_gpio); + gpio_direction_output(chip->pmic_sleep_gpio,0); + ret = gpio_get_value(chip->pmic_sleep_gpio); pr_info("%s: rk818_pmic_sleep=%x\n", __func__, ret); } -#endif - /**********************************************************/ - if (pdev) { - rk818->num_regulators = rk818_NUM_REGULATORS; - rk818->rdev = kcalloc(rk818_NUM_REGULATORS,sizeof(struct regulator_dev *), GFP_KERNEL); - if (!rk818->rdev) { + /* If we got pdata, let's do some important */ + if (pdata) + { + chip->num_regulators = rk818_NUM_REGULATORS; + chip->rdev = kcalloc(rk818_NUM_REGULATORS,sizeof(struct regulator_dev *), GFP_KERNEL); + if (!chip->rdev) { return -ENOMEM; } /* Instantiate the regulators */ for (i = 0; i < rk818_NUM_REGULATORS; i++) { - reg_data = pdev->rk818_init_data[i]; + reg_data = pdata->rk818_init_data[i]; if (!reg_data) continue; - config.dev = rk818->dev; - config.driver_data = rk818; - if (rk818->dev->of_node) - config.of_node = pdev->of_node[i]; + config.dev = chip->dev; + config.driver_data = chip; + if (chip->dev->of_node) + config.of_node = pdata->of_node[i]; if (reg_data && reg_data->constraints.name) rail_name = reg_data->constraints.name; else rail_name = regulators[i].name; reg_data->supply_regulator = rail_name; - config.init_data =reg_data; + config.init_data = reg_data; - rk818_rdev = regulator_register(®ulators[i],&config); + rk818_rdev = devm_regulator_register(chip->dev, ®ulators[i], &config); if (IS_ERR(rk818_rdev)) { printk("failed to register %d regulator\n",i); } - rk818->rdev[i] = rk818_rdev; + chip->rdev[i] = rk818_rdev; } } - rk818->irq_gpio = pdev->irq_gpio; - ret = rk818_irq_init(rk818, rk818->irq_gpio, pdev); + chip->irq_gpio = pdata->irq_gpio; + ret = rk818_irq_init(chip, chip->irq_gpio, pdata); if (ret < 0) printk("rk818 irq init error\n"); return 0; } -static int rk818_i2c_remove(struct i2c_client *i2c) +static int rk818_i2c_remove(struct i2c_client *client) { - struct rk818 *rk818 = i2c_get_clientdata(i2c); - int i; - printk("%s, %d\n", __FUNCTION__, __LINE__); - for (i = 0; i < rk818->num_regulators; i++) - if (rk818->rdev[i]) - regulator_unregister(rk818->rdev[i]); - i2c_set_clientdata(i2c, NULL); + i2c_set_clientdata(client, NULL); return 0; } diff --git a/debug/regulator/rk818.h b/debug/regulator/rk818.h new file mode 100755 index 0000000..f8ed2fb --- /dev/null +++ b/debug/regulator/rk818.h @@ -0,0 +1,178 @@ +#ifndef __LINUX_REGULATOR_rk818_H +#define __LINUX_REGULATOR_rk818_H + +#include +#include +#include + +#define RK818_DCDC1 0 //(0+RK818_START) +#define RK818_LDO1 4 //(4+RK818_START) + +#define RK818_SECONDS_REG 0x00 +#define RK818_MINUTES_REG 0x01 +#define RK818_HOURS_REG 0x02 +#define RK818_DAYS_REG 0x03 +#define RK818_MONTHS_REG 0x04 +#define RK818_YEARS_REG 0x05 +#define RK818_WEEKS_REG 0x06 +#define RK818_ALARM_SECONDS_REG 0x07 +#define RK818_ALARM_MINUTES_REG 0x08 +#define RK818_ALARM_HOURS_REG 0x09 +#define RK818_ALARM_DAYS_REG 0x0a +#define RK818_ALARM_MONTHS_REG 0x0b +#define RK818_ALARM_YEARS_REG 0x0c +#define RK818_RTC_CTRL_REG 0x10 +#define RK818_RTC_STATUS_REG 0x11 +#define RK818_RTC_INT_REG 0x12 +#define RK818_RTC_COMP_LSB_REG 0x13 +#define RK818_RTC_COMP_MSB_REG 0x14 +#define RK818_CLK32OUT_REG 0x20 +#define RK818_VB_MON_REG 0x21 +#define RK818_THERMAL_REG 0x22 +#define RK818_DCDC_EN_REG 0x23 +#define RK818_LDO_EN_REG 0x24 +#define RK818_SLEEP_SET_OFF_REG1 0x25 +#define RK818_SLEEP_SET_OFF_REG2 0x26 +#define RK818_DCDC_UV_STS_REG 0x27 +#define RK818_DCDC_UV_ACT_REG 0x28 +#define RK818_LDO_UV_STS_REG 0x29 +#define RK818_LDO_UV_ACT_REG 0x2a +#define RK818_DCDC_PG_REG 0x2b +#define RK818_LDO_PG_REG 0x2c +#define RK818_VOUT_MON_TDB_REG 0x2d +#define RK818_BUCK1_CONFIG_REG 0x2e +#define RK818_BUCK1_ON_REG 0x2f +#define RK818_BUCK1_SLP_REG 0x30 +#define RK818_BUCK2_CONFIG_REG 0x32 +#define RK818_BUCK2_ON_REG 0x33 +#define RK818_BUCK2_SLP_REG 0x34 +#define RK818_BUCK3_CONFIG_REG 0x36 +#define RK818_BUCK4_CONFIG_REG 0x37 +#define RK818_BUCK4_ON_REG 0x38 +#define RK818_BUCK4_SLP_VSEL_REG 0x39 +#define RK818_BOOST_CONFIG_REG 0x3a +#define RK818_LDO1_ON_VSEL_REG 0x3b +#define RK818_LDO1_SLP_VSEL_REG 0x3c +#define RK818_LDO2_ON_VSEL_REG 0x3d +#define RK818_LDO2_SLP_VSEL_REG 0x3e +#define RK818_LDO3_ON_VSEL_REG 0x3f +#define RK818_LDO3_SLP_VSEL_REG 0x40 +#define RK818_LDO4_ON_VSEL_REG 0x41 +#define RK818_LDO4_SLP_VSEL_REG 0x42 +#define RK818_LDO5_ON_VSEL_REG 0x43 +#define RK818_LDO5_SLP_VSEL_REG 0x44 +#define RK818_LDO6_ON_VSEL_REG 0x45 +#define RK818_LDO6_SLP_VSEL_REG 0x46 +#define RK818_LDO7_ON_VSEL_REG 0x47 +#define RK818_LDO7_SLP_VSEL_REG 0x48 +#define RK818_LDO8_ON_VSEL_REG 0x49 +#define RK818_LDO8_SLP_VSEL_REG 0x4a +#define RK818_BOOST_LDO9_ON_VSEL_REG 0x54 +#define RK818_BOOST_LDO9_SLP_VSEL_REG 0x55 +#define RK818_DEVCTRL_REG 0x4b +#define RK818_INT_STS_REG1 0X4c +#define RK818_INT_STS_MSK_REG1 0X4d +#define RK818_INT_STS_REG2 0X4e +#define RK818_INT_STS_MSK_REG2 0X4f +#define RK818_IO_POL_REG 0X50 + +/* IRQ Definitions */ +#define RK818_IRQ_VOUT_LO 0 +#define RK818_IRQ_VB_LO 1 +#define RK818_IRQ_PWRON 2 +#define RK818_IRQ_PWRON_LP 3 +#define RK818_IRQ_HOTDIE 4 +#define RK818_IRQ_RTC_ALARM 5 +#define RK818_IRQ_RTC_PERIOD 6 +#define RK818_IRQ_USB_OV 7 +#define RK818_IRQ_PLUG_IN 8 +#define RK818_IRQ_PLUG_OUT 9 +#define RK818_IRQ_CHG_OK 10 +#define RK818_IRQ_CHG_TE 11 +#define RK818_IRQ_CHG_TS1 12 +#define RK818_IRQ_TS2 13 +#define RK818_IRQ_CHG_CVTLIM 14 +#define RK818_IRQ_DISCHG_ILIM 6 + +#define RK818_NUM_IRQ 16 + +#define rk818_NUM_REGULATORS 14 +struct rk818_chip; + +#define RK818_VBAT_LOW_2V8 0x00 +#define RK818_VBAT_LOW_2V9 0x01 +#define RK818_VBAT_LOW_3V0 0x02 +#define RK818_VBAT_LOW_3V1 0x03 +#define RK818_VBAT_LOW_3V2 0x04 +#define RK818_VBAT_LOW_3V3 0x05 +#define RK818_VBAT_LOW_3V4 0x06 +#define RK818_VBAT_LOW_3V5 0x07 +#define VBAT_LOW_VOL_MASK (0x07 << 0) +#define EN_VABT_LOW_SHUT_DOWN (0x00 << 4) +#define EN_VBAT_LOW_IRQ (0x1 <<4 ) +#define VBAT_LOW_ACT_MASK (0x1 << 4) + +struct rk818_chip_board { + int irq; + int irq_base; + int irq_gpio; + int wakeup; + struct regulator_init_data *rk818_init_data[rk818_NUM_REGULATORS]; + struct device_node *of_node[rk818_NUM_REGULATORS]; + int pmic_sleep_gpio; /* */ + unsigned int dcdc_slp_voltage[3]; /* buckx_voltage in uV */ + bool pmic_sleep; + unsigned int ldo_slp_voltage[7]; + bool pm_off; +}; + +struct rk818_chip_regulator_subdev { + int id; + struct regulator_init_data *initdata; +}; + +struct rk818_chip { + struct device *dev; + struct mutex io_lock; + struct i2c_client *client; + int num_regulators; + struct regulator_dev **rdev; + struct wake_lock irq_wake; + struct mutex irq_lock; + int irq_base; + int irq_num; + int chip_irq; + int irq_gpio; + int wakeup; + u32 irq_mask; + struct irq_domain *irq_domain; + int (*read)(struct rk818_chip *rk818, u8 reg, int size, void *dest); + int (*write)(struct rk818_chip *rk818, u8 reg, int size, void *src); + struct battery_platform_data *battery_data; + int pmic_sleep_gpio; + unsigned int dcdc_slp_voltage[3]; /* buckx_voltage in uV */ + bool pmic_sleep; + unsigned int ldo_slp_voltage[7]; +}; + +struct rk818_chip_platform_data { + int num_regulators; + struct rk818_chip_regulator_subdev *regulators; + struct battery_platform_data *battery_data; + int irq; + int irq_base; + struct irq_domain *irq_domain; +}; + +int rk818_irq_init(struct rk818_chip *rk818, int irq,struct rk818_chip_board *pdata); +int rk818_i2c_read(struct rk818_chip *rk818, char reg, int count,u8 *dest); +int rk818_i2c_write(struct rk818_chip *rk818, char reg, int count, const u8 src); +int rk818_set_bits(struct rk818_chip *rk818, u8 reg, u8 mask, u8 val); +int rk818_clear_bits(struct rk818_chip *rk818, u8 reg, u8 mask); +u8 rk818_reg_read(struct rk818_chip *rk818, u8 reg); +int rk818_reg_write(struct rk818_chip *rk818, u8 reg, u8 val); +int rk818_bulk_read(struct rk818_chip *rk818, u8 reg, int count, u8 *buf); +int rk818_bulk_write(struct rk818_chip *rk818, u8 reg, int count, u8 *buf); +void rk818_device_shutdown(void); + +#endif diff --git a/debug/regulator/rk818_powertree.png b/debug/regulator/rk818_powertree.png new file mode 100644 index 0000000000000000000000000000000000000000..54cabd6b285aeea0519eeb0569dac3cbf06c92a3 GIT binary patch literal 94567 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 + VCC_TP-supply = <&rk818_ldo2_reg>; + }; +};