static int __devinit rt5033_regulator_probe(struct platform_device *pdev) { struct rt5033_mfd_chip *chip = dev_get_drvdata(pdev->dev.parent); struct rt5033_mfd_platform_data *mfd_pdata = chip->dev->platform_data; const struct rt5033_regulator_platform_data* pdata; const struct rt5033_pmic_irq_handler *irq_handler = NULL; int irq_handler_size = 0; struct rt5033_regulator_info *ri; struct regulator_dev *rdev; struct regulator_init_data* init_data; int ret; pr_info("Richtek RT5033 regulator driver probing...\n"); BUG_ON(mfd_pdata == NULL); if (mfd_pdata->regulator_platform_data == NULL) mfd_pdata->regulator_platform_data = &default_rv_pdata; pdata = mfd_pdata->regulator_platform_data; ri = find_regulator_info(pdev->id); if (ri == NULL) { dev_err(&pdev->dev, "invalid regulator ID specified\n"); return -EINVAL; } init_data = pdata->regulator[pdev->id]; if (init_data == NULL) { dev_err(&pdev->dev, "no initializing data\n"); return -EINVAL; } ri->i2c = chip->i2c_client; ri->chip = chip; chip->regulator_info[pdev->id] = ri; rdev = rt5033_regulator_register(&ri->desc, &pdev->dev, init_data, ri); if (IS_ERR(rdev)) { dev_err(&pdev->dev, "failed to register regulator %s\n", ri->desc.name); return PTR_ERR(rdev); } platform_set_drvdata(pdev, rdev); ret = rt5033_regulator_init_regs(rdev); if (ret<0) goto err_init_device; switch (pdev->id) { case RT5033_ID_LDO_SAFE: irq_handler = rt5033_pmic_safeldo_irq_handlers; irq_handler_size = ARRAY_SIZE(rt5033_pmic_safeldo_irq_handlers); break; case RT5033_ID_LDO1: irq_handler = rt5033_pmic_ldo_irq_handlers; irq_handler_size = ARRAY_SIZE(rt5033_pmic_ldo_irq_handlers); break; case RT5033_ID_DCDC1: irq_handler = rt5033_pmic_buck_irq_handlers; irq_handler_size = ARRAY_SIZE(rt5033_pmic_buck_irq_handlers); break; default: pr_err("Error : invalid ID\n"); } ret = register_irq(pdev, rdev, irq_handler, irq_handler_size); if (ret < 0) { pr_err("Error : can't register irq\n"); goto err_register_irq; } return 0; err_register_irq: err_init_device: regulator_unregister(rdev); return ret; }
static int rt5033_regulator_probe(struct platform_device *pdev) { struct rt5033_mfd_chip *chip = dev_get_drvdata(pdev->dev.parent); struct rt5033_mfd_platform_data *mfd_pdata = chip->dev->platform_data; const struct rt5033_regulator_platform_data* pdata; const struct rt5033_pmic_irq_handler *irq_handler = NULL; int irq_handler_size = 0; struct rt5033_regulator_info *ri; struct regulator_dev *rdev; struct regulator_init_data* init_data; int ret; dev_info(&pdev->dev, "Richtek RT5033 regulator driver probing (id = %d)...\n", pdev->id); chip_rev = chip->rev_id; #ifdef CONFIG_OF #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)) if (pdev->dev.parent->of_node) { pdev->dev.of_node = of_find_compatible_node( of_node_get(pdev->dev.parent->of_node), NULL, rt5033_regulator_match_table[pdev->id].compatible); } #endif #endif if (pdev->dev.of_node) { dev_info(&pdev->dev, "Use DT...\n"); #if (LINUX_VERSION_CODE>=KERNEL_VERSION(3,1,0)) init_data = of_get_regulator_init_data(&pdev->dev, pdev->dev.of_node); #else init_data = of_get_regulator_init_data(&pdev->dev); #endif if (init_data == NULL) { dev_info(&pdev->dev, "Cannot find DTS data...\n"); init_data = default_rv_pdata.regulator[pdev->id]; } } else { BUG_ON(mfd_pdata == NULL); if (mfd_pdata->regulator_platform_data == NULL) mfd_pdata->regulator_platform_data = &default_rv_pdata; pdata = mfd_pdata->regulator_platform_data; init_data = pdata->regulator[pdev->id]; } ri = find_regulator_info(pdev->id); if (ri == NULL) { dev_err(&pdev->dev, "invalid regulator ID specified\n"); return -EINVAL; } if (init_data == NULL) { dev_err(&pdev->dev, "no initializing data\n"); return -EINVAL; } ri->i2c = chip->i2c_client; ri->chip = chip; chip->regulator_info[pdev->id] = ri; rdev = rt5033_regulator_register(&ri->desc, &pdev->dev, init_data, ri); if (IS_ERR(rdev)) { dev_err(&pdev->dev, "failed to register regulator %s\n", ri->desc.name); return PTR_ERR(rdev); } platform_set_drvdata(pdev, rdev); ret = rt5033_regulator_init_regs(rdev); if (ret<0) goto err_init_device; dev_info(&pdev->dev, "RT5033 Regulator %s driver loaded successfully...\n", rdev->desc->name); switch (pdev->id) { case RT5033_ID_LDO_SAFE: irq_handler = rt5033_pmic_safeldo_irq_handlers; irq_handler_size = ARRAY_SIZE(rt5033_pmic_safeldo_irq_handlers); break; case RT5033_ID_LDO1: irq_handler = rt5033_pmic_ldo_irq_handlers; irq_handler_size = ARRAY_SIZE(rt5033_pmic_ldo_irq_handlers); break; case RT5033_ID_DCDC1: irq_handler = rt5033_pmic_buck_irq_handlers; irq_handler_size = ARRAY_SIZE(rt5033_pmic_buck_irq_handlers); break; default: pr_err("Error : invalid ID\n"); } ret = register_irq(pdev, rdev, irq_handler, irq_handler_size); if (ret < 0) { pr_err("Error : can't register irq\n"); goto err_register_irq; } return 0; err_register_irq: err_init_device: dev_info(&pdev->dev, "RT5033 Regulator %s unregistered...\n", rdev->desc->name); regulator_unregister(rdev); return ret; }