OSDN Git Service

regulator: pwm: No need to make a copy of regulator_ops per instance
authorAxel Lin <axel.lin@ingics.com>
Sat, 12 Jan 2019 04:30:13 +0000 (12:30 +0800)
committerMark Brown <broonie@kernel.org>
Mon, 14 Jan 2019 11:46:05 +0000 (11:46 +0000)
Having instance specific copy of desc is enough to support multiple
instance of pwm regulator.
The regulator_ops is never changed so no need to copy it per instance, make
pwm_regulator_voltage_table_ops and pwm_regulator_voltage_continuous_ops
const to ensure they won't be changed.
The pwm_regulator_desc is a template to be copied so also make it const.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/regulator/pwm-regulator.c

index a2fd140..3f53f91 100644 (file)
@@ -40,9 +40,6 @@ struct pwm_regulator_data {
        /* regulator descriptor */
        struct regulator_desc desc;
 
-       /* Regulator ops */
-       struct regulator_ops ops;
-
        int state;
 
        /* Enable GPIO */
@@ -231,7 +228,7 @@ static int pwm_regulator_set_voltage(struct regulator_dev *rdev,
        return 0;
 }
 
-static struct regulator_ops pwm_regulator_voltage_table_ops = {
+static const struct regulator_ops pwm_regulator_voltage_table_ops = {
        .set_voltage_sel = pwm_regulator_set_voltage_sel,
        .get_voltage_sel = pwm_regulator_get_voltage_sel,
        .list_voltage    = pwm_regulator_list_voltage,
@@ -241,7 +238,7 @@ static struct regulator_ops pwm_regulator_voltage_table_ops = {
        .is_enabled      = pwm_regulator_is_enabled,
 };
 
-static struct regulator_ops pwm_regulator_voltage_continuous_ops = {
+static const struct regulator_ops pwm_regulator_voltage_continuous_ops = {
        .get_voltage = pwm_regulator_get_voltage,
        .set_voltage = pwm_regulator_set_voltage,
        .enable          = pwm_regulator_enable,
@@ -249,7 +246,7 @@ static struct regulator_ops pwm_regulator_voltage_continuous_ops = {
        .is_enabled      = pwm_regulator_is_enabled,
 };
 
-static struct regulator_desc pwm_regulator_desc = {
+static const struct regulator_desc pwm_regulator_desc = {
        .name           = "pwm-regulator",
        .type           = REGULATOR_VOLTAGE,
        .owner          = THIS_MODULE,
@@ -287,9 +284,7 @@ static int pwm_regulator_init_table(struct platform_device *pdev,
 
        drvdata->state                  = -EINVAL;
        drvdata->duty_cycle_table       = duty_cycle_table;
-       memcpy(&drvdata->ops, &pwm_regulator_voltage_table_ops,
-              sizeof(drvdata->ops));
-       drvdata->desc.ops = &drvdata->ops;
+       drvdata->desc.ops = &pwm_regulator_voltage_table_ops;
        drvdata->desc.n_voltages        = length / sizeof(*duty_cycle_table);
 
        return 0;
@@ -301,9 +296,7 @@ static int pwm_regulator_init_continuous(struct platform_device *pdev,
        u32 dutycycle_range[2] = { 0, 100 };
        u32 dutycycle_unit = 100;
 
-       memcpy(&drvdata->ops, &pwm_regulator_voltage_continuous_ops,
-              sizeof(drvdata->ops));
-       drvdata->desc.ops = &drvdata->ops;
+       drvdata->desc.ops = &pwm_regulator_voltage_continuous_ops;
        drvdata->desc.continuous_voltage_range = true;
 
        of_property_read_u32_array(pdev->dev.of_node,