Loading Documentation/devicetree/bindings/regulator/pbias-regulator.txt +6 −1 Original line number Diff line number Diff line Loading @@ -2,7 +2,12 @@ PBIAS internal regulator for SD card dual voltage i/o pads on OMAP SoCs. Required properties: - compatible: - "ti,pbias-omap" for OMAP2, OMAP3, OMAP4, OMAP5, DRA7. - should be "ti,pbias-dra7" for DRA7 - should be "ti,pbias-omap2" for OMAP2 - should be "ti,pbias-omap3" for OMAP3 - should be "ti,pbias-omap4" for OMAP4 - should be "ti,pbias-omap5" for OMAP5 - "ti,pbias-omap" is deprecated - reg: pbias register offset from syscon base and size of pbias register. - syscon : phandle of the system control module - regulator-name : should be Loading drivers/regulator/pbias-regulator.c +50 −6 Original line number Diff line number Diff line Loading @@ -45,6 +45,10 @@ struct pbias_regulator_data { int voltage; }; struct pbias_of_data { unsigned int offset; }; static const unsigned int pbias_volt_table[] = { 1800000, 3000000 Loading Loading @@ -102,8 +106,35 @@ static struct of_regulator_match pbias_matches[] = { }; #define PBIAS_NUM_REGS ARRAY_SIZE(pbias_matches) /* Offset from SCM general area (and syscon) base */ static const struct pbias_of_data pbias_of_data_omap2 = { .offset = 0x230, }; static const struct pbias_of_data pbias_of_data_omap3 = { .offset = 0x2b0, }; static const struct pbias_of_data pbias_of_data_omap4 = { .offset = 0x60, }; static const struct pbias_of_data pbias_of_data_omap5 = { .offset = 0x60, }; static const struct pbias_of_data pbias_of_data_dra7 = { .offset = 0xe00, }; static const struct of_device_id pbias_of_match[] = { { .compatible = "ti,pbias-omap", }, { .compatible = "ti,pbias-omap2", .data = &pbias_of_data_omap2, }, { .compatible = "ti,pbias-omap3", .data = &pbias_of_data_omap3, }, { .compatible = "ti,pbias-omap4", .data = &pbias_of_data_omap4, }, { .compatible = "ti,pbias-omap5", .data = &pbias_of_data_omap5, }, { .compatible = "ti,pbias-dra7", .data = &pbias_of_data_dra7, }, {}, }; MODULE_DEVICE_TABLE(of, pbias_of_match); Loading @@ -118,6 +149,9 @@ static int pbias_regulator_probe(struct platform_device *pdev) const struct pbias_reg_info *info; int ret = 0; int count, idx, data_idx = 0; const struct of_device_id *match; const struct pbias_of_data *data; unsigned int offset; count = of_regulator_match(&pdev->dev, np, pbias_matches, PBIAS_NUM_REGS); Loading @@ -133,6 +167,20 @@ static int pbias_regulator_probe(struct platform_device *pdev) if (IS_ERR(syscon)) return PTR_ERR(syscon); match = of_match_device(of_match_ptr(pbias_of_match), &pdev->dev); if (match && match->data) { data = match->data; offset = data->offset; } else { res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) return -EINVAL; offset = res->start; dev_WARN(&pdev->dev, "using legacy dt data for pbias offset\n"); } cfg.regmap = syscon; cfg.dev = &pdev->dev; Loading @@ -145,10 +193,6 @@ static int pbias_regulator_probe(struct platform_device *pdev) if (!info) return -ENODEV; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) return -EINVAL; drvdata[data_idx].syscon = syscon; drvdata[data_idx].info = info; drvdata[data_idx].desc.name = info->name; Loading @@ -158,9 +202,9 @@ static int pbias_regulator_probe(struct platform_device *pdev) drvdata[data_idx].desc.volt_table = pbias_volt_table; drvdata[data_idx].desc.n_voltages = 2; drvdata[data_idx].desc.enable_time = info->enable_time; drvdata[data_idx].desc.vsel_reg = res->start; drvdata[data_idx].desc.vsel_reg = offset; drvdata[data_idx].desc.vsel_mask = info->vmode; drvdata[data_idx].desc.enable_reg = res->start; drvdata[data_idx].desc.enable_reg = offset; drvdata[data_idx].desc.enable_mask = info->enable_mask; drvdata[data_idx].desc.enable_val = info->enable; drvdata[data_idx].desc.disable_val = info->disable_val; Loading Loading
Documentation/devicetree/bindings/regulator/pbias-regulator.txt +6 −1 Original line number Diff line number Diff line Loading @@ -2,7 +2,12 @@ PBIAS internal regulator for SD card dual voltage i/o pads on OMAP SoCs. Required properties: - compatible: - "ti,pbias-omap" for OMAP2, OMAP3, OMAP4, OMAP5, DRA7. - should be "ti,pbias-dra7" for DRA7 - should be "ti,pbias-omap2" for OMAP2 - should be "ti,pbias-omap3" for OMAP3 - should be "ti,pbias-omap4" for OMAP4 - should be "ti,pbias-omap5" for OMAP5 - "ti,pbias-omap" is deprecated - reg: pbias register offset from syscon base and size of pbias register. - syscon : phandle of the system control module - regulator-name : should be Loading
drivers/regulator/pbias-regulator.c +50 −6 Original line number Diff line number Diff line Loading @@ -45,6 +45,10 @@ struct pbias_regulator_data { int voltage; }; struct pbias_of_data { unsigned int offset; }; static const unsigned int pbias_volt_table[] = { 1800000, 3000000 Loading Loading @@ -102,8 +106,35 @@ static struct of_regulator_match pbias_matches[] = { }; #define PBIAS_NUM_REGS ARRAY_SIZE(pbias_matches) /* Offset from SCM general area (and syscon) base */ static const struct pbias_of_data pbias_of_data_omap2 = { .offset = 0x230, }; static const struct pbias_of_data pbias_of_data_omap3 = { .offset = 0x2b0, }; static const struct pbias_of_data pbias_of_data_omap4 = { .offset = 0x60, }; static const struct pbias_of_data pbias_of_data_omap5 = { .offset = 0x60, }; static const struct pbias_of_data pbias_of_data_dra7 = { .offset = 0xe00, }; static const struct of_device_id pbias_of_match[] = { { .compatible = "ti,pbias-omap", }, { .compatible = "ti,pbias-omap2", .data = &pbias_of_data_omap2, }, { .compatible = "ti,pbias-omap3", .data = &pbias_of_data_omap3, }, { .compatible = "ti,pbias-omap4", .data = &pbias_of_data_omap4, }, { .compatible = "ti,pbias-omap5", .data = &pbias_of_data_omap5, }, { .compatible = "ti,pbias-dra7", .data = &pbias_of_data_dra7, }, {}, }; MODULE_DEVICE_TABLE(of, pbias_of_match); Loading @@ -118,6 +149,9 @@ static int pbias_regulator_probe(struct platform_device *pdev) const struct pbias_reg_info *info; int ret = 0; int count, idx, data_idx = 0; const struct of_device_id *match; const struct pbias_of_data *data; unsigned int offset; count = of_regulator_match(&pdev->dev, np, pbias_matches, PBIAS_NUM_REGS); Loading @@ -133,6 +167,20 @@ static int pbias_regulator_probe(struct platform_device *pdev) if (IS_ERR(syscon)) return PTR_ERR(syscon); match = of_match_device(of_match_ptr(pbias_of_match), &pdev->dev); if (match && match->data) { data = match->data; offset = data->offset; } else { res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) return -EINVAL; offset = res->start; dev_WARN(&pdev->dev, "using legacy dt data for pbias offset\n"); } cfg.regmap = syscon; cfg.dev = &pdev->dev; Loading @@ -145,10 +193,6 @@ static int pbias_regulator_probe(struct platform_device *pdev) if (!info) return -ENODEV; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) return -EINVAL; drvdata[data_idx].syscon = syscon; drvdata[data_idx].info = info; drvdata[data_idx].desc.name = info->name; Loading @@ -158,9 +202,9 @@ static int pbias_regulator_probe(struct platform_device *pdev) drvdata[data_idx].desc.volt_table = pbias_volt_table; drvdata[data_idx].desc.n_voltages = 2; drvdata[data_idx].desc.enable_time = info->enable_time; drvdata[data_idx].desc.vsel_reg = res->start; drvdata[data_idx].desc.vsel_reg = offset; drvdata[data_idx].desc.vsel_mask = info->vmode; drvdata[data_idx].desc.enable_reg = res->start; drvdata[data_idx].desc.enable_reg = offset; drvdata[data_idx].desc.enable_mask = info->enable_mask; drvdata[data_idx].desc.enable_val = info->enable; drvdata[data_idx].desc.disable_val = info->disable_val; Loading