Skip to contentSkip to conversation

da905x: Add const to da905x_regulator_info blocks

PATCH New Joe Perches 3 participants 6 messages Sep 9, 2016

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 da905x: Add const to da905x_regulator_info blocks

Moving data to text is a good thing.

Mark the regulator_info structs as const and change the pointers to const.

$ size drivers/regulator/*.o*
   text	   data	    bss	    dec	    hex	filename
   7455	    100	      0	   7555	   1d83	drivers/regulator/da9052-regulator.o.new
   2111	   5392	      0	   7503	   1d4f	drivers/regulator/da9052-regulator.o.old
   4321	    100	      0	   4421	   1145	drivers/regulator/da9055-regulator.o.new
   2611	   1800	      0	   4411	   113b	drivers/regulator/da9055-regulator.o.old
---
 drivers/regulator/da9052-regulator.c | 37 ++++++++++++++++++------------------
 drivers/regulator/da9055-regulator.c | 32 +++++++++++++++----------------
 2 files changed, 34 insertions(+), 35 deletions(-)
drivers/regulator/da9052-regulator.c +18 -19
index 9ececfe..184ff1d 100644
@@ -75,11 +75,11 @@ struct da9052_regulator_info {
 
 struct da9052_regulator {
 	struct da9052 *da9052;
-	struct da9052_regulator_info *info;
+	const struct da9052_regulator_info *info;
 	struct regulator_dev *rdev;
 };
 
-static int verify_range(struct da9052_regulator_info *info,
+static int verify_range(const struct da9052_regulator_info *info,
 			 int min_uV, int max_uV)
 {
 	if (min_uV > info->max_uV || max_uV < info->min_uV)
@@ -159,7 +159,7 @@ static int da9052_list_voltage(struct regulator_dev *rdev,
 				unsigned int selector)
 {
 	struct da9052_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9052_regulator_info *info = regulator->info;
+	const struct da9052_regulator_info *info = regulator->info;
 	int id = rdev_get_id(rdev);
 	int volt_uV;
 
@@ -183,7 +183,7 @@ static int da9052_map_voltage(struct regulator_dev *rdev,
 			      int min_uV, int max_uV)
 {
 	struct da9052_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9052_regulator_info *info = regulator->info;
+	const struct da9052_regulator_info *info = regulator->info;
 	int id = rdev_get_id(rdev);
 	int ret, sel;
 
@@ -214,7 +214,7 @@ static int da9052_regulator_set_voltage_sel(struct regulator_dev *rdev,
 					    unsigned int selector)
 {
 	struct da9052_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9052_regulator_info *info = regulator->info;
+	const struct da9052_regulator_info *info = regulator->info;
 	int id = rdev_get_id(rdev);
 	int ret;
 
@@ -245,7 +245,7 @@ static int da9052_regulator_set_voltage_time_sel(struct regulator_dev *rdev,
 						 unsigned int new_sel)
 {
 	struct da9052_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9052_regulator_info *info = regulator->info;
+	const struct da9052_regulator_info *info = regulator->info;
 	int id = rdev_get_id(rdev);
 	int ret = 0;
 
@@ -330,7 +330,7 @@ static const struct regulator_ops da9052_ldo_ops = {
 	.activate_bit = (abits),\
 }
 
-static struct da9052_regulator_info da9052_regulator_info[] = {
+static const struct da9052_regulator_info da9052_regulator_info[] = {
 	DA9052_DCDC(BUCK1, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBCOREGO),
 	DA9052_DCDC(BUCK2, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBPROGO),
 	DA9052_DCDC(BUCK3, 25, 950, 2525, 6, 6, DA9052_SUPPLY_VBMEMGO),
@@ -347,7 +347,7 @@ static struct da9052_regulator_info da9052_regulator_info[] = {
 	DA9052_LDO(LDO10, 50, 1200, 3600, 6, 6, 0),
 };
 
-static struct da9052_regulator_info da9053_regulator_info[] = {
+static const struct da9052_regulator_info da9053_regulator_info[] = {
 	DA9052_DCDC(BUCK1, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBCOREGO),
 	DA9052_DCDC(BUCK2, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBPROGO),
 	DA9052_DCDC(BUCK3, 25, 950, 2525, 6, 6, DA9052_SUPPLY_VBMEMGO),
@@ -364,10 +364,10 @@ static struct da9052_regulator_info da9053_regulator_info[] = {
 	DA9052_LDO(LDO10, 50, 1200, 3600, 6, 6, 0),
 };
 
-static inline struct da9052_regulator_info *find_regulator_info(u8 chip_id,
-								 int id)
+static inline const struct da9052_regulator_info *
+find_regulator_info(u8 chip_id, int id)
 {
-	struct da9052_regulator_info *info;
+	const struct da9052_regulator_info *info;
 	int i;
 
 	switch (chip_id) {
@@ -435,14 +435,13 @@ static int da9052_regulator_probe(struct platform_device *pdev)
 			return -ENODEV;
 
 		for_each_child_of_node(nproot, np) {
-			if (!of_node_cmp(np->name,
-					 regulator->info->reg_desc.name)) {
-				config.init_data = of_get_regulator_init_data(
-					&pdev->dev, np,
-					&regulator->info->reg_desc);
-				config.of_node = np;
-				break;
-			}
+			if (of_node_cmp(np->name, regulator->info->reg_desc.name))
+				continue;
+			config.init_data =
+				of_get_regulator_init_data(&pdev->dev, np,
+							   &regulator->info->reg_desc);
+			config.of_node = np;
+			break;
 		}
 		of_node_put(nproot);
 #endif
drivers/regulator/da9055-regulator.c +16 -16
index d029c94..019df70 100644
@@ -77,7 +77,7 @@ struct da9055_regulator_info {
 
 struct da9055_regulator {
 	struct da9055 *da9055;
-	struct da9055_regulator_info *info;
+	const struct da9055_regulator_info *info;
 	struct regulator_dev *rdev;
 	enum gpio_select reg_rselect;
 };
@@ -85,7 +85,7 @@ struct da9055_regulator {
 static unsigned int da9055_buck_get_mode(struct regulator_dev *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret, mode = 0;
 
 	ret = da9055_reg_read(regulator->da9055, info->mode.reg);
@@ -111,7 +111,7 @@ static int da9055_buck_set_mode(struct regulator_dev *rdev,
 					unsigned int mode)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int val = 0;
 
 	switch (mode) {
@@ -133,7 +133,7 @@ static int da9055_buck_set_mode(struct regulator_dev *rdev,
 static unsigned int da9055_ldo_get_mode(struct regulator_dev *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret;
 
 	ret = da9055_reg_read(regulator->da9055, info->volt.reg_b);
@@ -149,7 +149,7 @@ static unsigned int da9055_ldo_get_mode(struct regulator_dev *rdev)
 static int da9055_ldo_set_mode(struct regulator_dev *rdev, unsigned int mode)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	struct da9055_volt_reg volt = info->volt;
 	int val = 0;
 
@@ -171,7 +171,7 @@ static int da9055_ldo_set_mode(struct regulator_dev *rdev, unsigned int mode)
 static int da9055_buck_get_current_limit(struct regulator_dev *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret;
 
 	ret = da9055_reg_read(regulator->da9055, DA9055_REG_BUCK_LIM);
@@ -186,7 +186,7 @@ static int da9055_buck_set_current_limit(struct regulator_dev *rdev, int min_uA,
 					 int max_uA)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int i;
 
 	for (i = ARRAY_SIZE(da9055_current_limits) - 1; i >= 0; i--) {
@@ -204,7 +204,7 @@ static int da9055_buck_set_current_limit(struct regulator_dev *rdev, int min_uA,
 static int da9055_regulator_get_voltage_sel(struct regulator_dev *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	struct da9055_volt_reg volt = info->volt;
 	int ret, sel;
 
@@ -236,7 +236,7 @@ static int da9055_regulator_set_voltage_sel(struct regulator_dev *rdev,
 					    unsigned int selector)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret;
 
 	/*
@@ -279,7 +279,7 @@ static int da9055_regulator_set_suspend_voltage(struct regulator_dev *rdev,
 						int uV)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret;
 
 	/* Select register set B for suspend voltage ramping. */
@@ -301,7 +301,7 @@ static int da9055_regulator_set_suspend_voltage(struct regulator_dev *rdev,
 static int da9055_suspend_enable(struct regulator_dev *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 
 	/* Select register set B for voltage ramping. */
 	if (regulator->reg_rselect == NO_GPIO)
@@ -314,7 +314,7 @@ static int da9055_suspend_enable(struct regulator_dev *rdev)
 static int da9055_suspend_disable(struct regulator_dev *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 
 	/* Diselect register set B. */
 	if (regulator->reg_rselect == NO_GPIO)
@@ -425,7 +425,7 @@ static const struct regulator_ops da9055_ldo_ops = {
 	},\
 }
 
-static struct da9055_regulator_info da9055_regulator_info[] = {
+static const struct da9055_regulator_info da9055_regulator_info[] = {
 	DA9055_BUCK(BUCK1, 25, 725, 2075, 6, 9, 0xc, 2),
 	DA9055_BUCK(BUCK2, 25, 925, 2500, 6, 0, 3, 0),
 	DA9055_LDO(LDO1, 50, 900, 3300, 6, 2),
@@ -445,7 +445,7 @@ static int da9055_gpio_init(struct da9055_regulator *regulator,
 			    struct regulator_config *config,
 			    struct da9055_pdata *pdata, int id)
 {
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret = 0;
 
 	if (!pdata)
@@ -521,9 +521,9 @@ static irqreturn_t da9055_ldo5_6_oc_irq(int irq, void *data)
 	return IRQ_HANDLED;
 }
 
-static inline struct da9055_regulator_info *find_regulator_info(int id)
+static inline const struct da9055_regulator_info *find_regulator_info(int id)
 {
-	struct da9055_regulator_info *info;
+	const struct da9055_regulator_info *info;
 	int i;
 
 	for (i = 0; i < ARRAY_SIZE(da9055_regulator_info); i++) {
Signature · 1 line
2.10.0.rc2.1.g053435c
#1 lore raw

PATCH 1/1 da905x: Add const to da905x_regulator_info blocks

Hi Julia.

Could coccinelle identify non-const arrays that are never modified by anything and add const like this patch below by some mechanism?

---

Quoted 273 lines · Joe Perches

Moving data to text is a good thing.

Mark the regulator_info structs as const and change the pointers to const.

$ size drivers/regulator/*.o*
   text	   data	    bss	    dec	    hex	filename
   7455	    100	      0	   7555	   1d83	drivers/regulator/da9052-regulator.o.new
   2111	   5392	      0	   7503	   1d4f	drivers/regulator/da9052-regulator.o.old
   4321	    100	      0	   4421	   1145	drivers/regulator/da9055-regulator.o.new
   2611	   1800	      0	   4411	   113b	drivers/regulator/da9055-regulator.o.old
---
 drivers/regulator/da9052-regulator.c | 37 ++++++++++++++++++------------------
 drivers/regulator/da9055-regulator.c | 32 +++++++++++++++----------------
 2 files changed, 34 insertions(+), 35 deletions(-)
drivers/regulator/da9052-regulator.c +18 -19
index 9ececfe..184ff1d 100644
@@ -75,11 +75,11 @@ struct da9052_regulator_info {
 
 struct da9052_regulator {
 	struct da9052 *da9052;
-	struct da9052_regulator_info *info;
+	const struct da9052_regulator_info *info;
 	struct regulator_dev *rdev;
 };
 
-static int verify_range(struct da9052_regulator_info *info,
+static int verify_range(const struct da9052_regulator_info *info,
 			 int min_uV, int max_uV)
 {
 	if (min_uV > info->max_uV || max_uV < info->min_uV)
@@ -159,7 +159,7 @@ static int da9052_list_voltage(struct regulator_dev *rdev,
 				unsigned int selector)
 {
 	struct da9052_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9052_regulator_info *info = regulator->info;
+	const struct da9052_regulator_info *info = regulator->info;
 	int id = rdev_get_id(rdev);
 	int volt_uV;
 
@@ -183,7 +183,7 @@ static int da9052_map_voltage(struct regulator_dev *rdev,
 			      int min_uV, int max_uV)
 {
 	struct da9052_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9052_regulator_info *info = regulator->info;
+	const struct da9052_regulator_info *info = regulator->info;
 	int id = rdev_get_id(rdev);
 	int ret, sel;
 
@@ -214,7 +214,7 @@ static int da9052_regulator_set_voltage_sel(struct regulator_dev *rdev,
 					    unsigned int selector)
 {
 	struct da9052_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9052_regulator_info *info = regulator->info;
+	const struct da9052_regulator_info *info = regulator->info;
 	int id = rdev_get_id(rdev);
 	int ret;
 
@@ -245,7 +245,7 @@ static int da9052_regulator_set_voltage_time_sel(struct regulator_dev *rdev,
 						 unsigned int new_sel)
 {
 	struct da9052_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9052_regulator_info *info = regulator->info;
+	const struct da9052_regulator_info *info = regulator->info;
 	int id = rdev_get_id(rdev);
 	int ret = 0;
 
@@ -330,7 +330,7 @@ static const struct regulator_ops da9052_ldo_ops = {
 	.activate_bit = (abits),\
 }
 
-static struct da9052_regulator_info da9052_regulator_info[] = {
+static const struct da9052_regulator_info da9052_regulator_info[] = {
 	DA9052_DCDC(BUCK1, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBCOREGO),
 	DA9052_DCDC(BUCK2, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBPROGO),
 	DA9052_DCDC(BUCK3, 25, 950, 2525, 6, 6, DA9052_SUPPLY_VBMEMGO),
@@ -347,7 +347,7 @@ static struct da9052_regulator_info da9052_regulator_info[] = {
 	DA9052_LDO(LDO10, 50, 1200, 3600, 6, 6, 0),
 };
 
-static struct da9052_regulator_info da9053_regulator_info[] = {
+static const struct da9052_regulator_info da9053_regulator_info[] = {
 	DA9052_DCDC(BUCK1, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBCOREGO),
 	DA9052_DCDC(BUCK2, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBPROGO),
 	DA9052_DCDC(BUCK3, 25, 950, 2525, 6, 6, DA9052_SUPPLY_VBMEMGO),
@@ -364,10 +364,10 @@ static struct da9052_regulator_info da9053_regulator_info[] = {
 	DA9052_LDO(LDO10, 50, 1200, 3600, 6, 6, 0),
 };
 
-static inline struct da9052_regulator_info *find_regulator_info(u8 chip_id,
-								 int id)
+static inline const struct da9052_regulator_info *
+find_regulator_info(u8 chip_id, int id)
 {
-	struct da9052_regulator_info *info;
+	const struct da9052_regulator_info *info;
 	int i;
 
 	switch (chip_id) {
@@ -435,14 +435,13 @@ static int da9052_regulator_probe(struct platform_device *pdev)
 			return -ENODEV;
 
 		for_each_child_of_node(nproot, np) {
-			if (!of_node_cmp(np->name,
-					 regulator->info->reg_desc.name)) {
-				config.init_data = of_get_regulator_init_data(
-					&pdev->dev, np,
-					&regulator->info->reg_desc);
-				config.of_node = np;
-				break;
-			}
+			if (of_node_cmp(np->name, regulator->info->reg_desc.name))
+				continue;
+			config.init_data =
+				of_get_regulator_init_data(&pdev->dev, np,
+							   &regulator->info->reg_desc);
+			config.of_node = np;
+			break;
 		}
 		of_node_put(nproot);
 #endif
drivers/regulator/da9055-regulator.c +16 -16
index d029c94..019df70 100644
@@ -77,7 +77,7 @@ struct da9055_regulator_info {
 
 struct da9055_regulator {
 	struct da9055 *da9055;
-	struct da9055_regulator_info *info;
+	const struct da9055_regulator_info *info;
 	struct regulator_dev *rdev;
 	enum gpio_select reg_rselect;
 };
@@ -85,7 +85,7 @@ struct da9055_regulator {
 static unsigned int da9055_buck_get_mode(struct regulator_dev *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret, mode = 0;
 
 	ret = da9055_reg_read(regulator->da9055, info->mode.reg);
@@ -111,7 +111,7 @@ static int da9055_buck_set_mode(struct regulator_dev *rdev,
 					unsigned int mode)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int val = 0;
 
 	switch (mode) {
@@ -133,7 +133,7 @@ static int da9055_buck_set_mode(struct regulator_dev *rdev,
 static unsigned int da9055_ldo_get_mode(struct regulator_dev *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret;
 
 	ret = da9055_reg_read(regulator->da9055, info->volt.reg_b);
@@ -149,7 +149,7 @@ static unsigned int da9055_ldo_get_mode(struct regulator_dev *rdev)
 static int da9055_ldo_set_mode(struct regulator_dev *rdev, unsigned int mode)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	struct da9055_volt_reg volt = info->volt;
 	int val = 0;
 
@@ -171,7 +171,7 @@ static int da9055_ldo_set_mode(struct regulator_dev *rdev, unsigned int mode)
 static int da9055_buck_get_current_limit(struct regulator_dev *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret;
 
 	ret = da9055_reg_read(regulator->da9055, DA9055_REG_BUCK_LIM);
@@ -186,7 +186,7 @@ static int da9055_buck_set_current_limit(struct regulator_dev *rdev, int min_uA,
 					 int max_uA)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int i;
 
 	for (i = ARRAY_SIZE(da9055_current_limits) - 1; i >= 0; i--) {
@@ -204,7 +204,7 @@ static int da9055_buck_set_current_limit(struct regulator_dev *rdev, int min_uA,
 static int da9055_regulator_get_voltage_sel(struct regulator_dev *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	struct da9055_volt_reg volt = info->volt;
 	int ret, sel;
 
@@ -236,7 +236,7 @@ static int da9055_regulator_set_voltage_sel(struct regulator_dev *rdev,
 					    unsigned int selector)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret;
 
 	/*
@@ -279,7 +279,7 @@ static int da9055_regulator_set_suspend_voltage(struct regulator_dev *rdev,
 						int uV)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret;
 
 	/* Select register set B for suspend voltage ramping. */
@@ -301,7 +301,7 @@ static int da9055_regulator_set_suspend_voltage(struct regulator_dev *rdev,
 static int da9055_suspend_enable(struct regulator_dev *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 
 	/* Select register set B for voltage ramping. */
 	if (regulator->reg_rselect == NO_GPIO)
@@ -314,7 +314,7 @@ static int da9055_suspend_enable(struct regulator_dev *rdev)
 static int da9055_suspend_disable(struct regulator_dev *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 
 	/* Diselect register set B. */
 	if (regulator->reg_rselect == NO_GPIO)
@@ -425,7 +425,7 @@ static const struct regulator_ops da9055_ldo_ops = {
 	},
 }
 
-static struct da9055_regulator_info da9055_regulator_info[] = {
+static const struct da9055_regulator_info da9055_regulator_info[] = {
 	DA9055_BUCK(BUCK1, 25, 725, 2075, 6, 9, 0xc, 2),
 	DA9055_BUCK(BUCK2, 25, 925, 2500, 6, 0, 3, 0),
 	DA9055_LDO(LDO1, 50, 900, 3300, 6, 2),
@@ -445,7 +445,7 @@ static int da9055_gpio_init(struct da9055_regulator *regulator,
 			    struct regulator_config *config,
 			    struct da9055_pdata *pdata, int id)
 {
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret = 0;
 
 	if (!pdata)
@@ -521,9 +521,9 @@ static irqreturn_t da9055_ldo5_6_oc_irq(int irq, void *data)
 	return IRQ_HANDLED;
 }
 
-static inline struct da9055_regulator_info *find_regulator_info(int id)
+static inline const struct da9055_regulator_info *find_regulator_info(int id)
 {
-	struct da9055_regulator_info *info;
+	const struct da9055_regulator_info *info;
 	int i;
 
 	for (i = 0; i < ARRAY_SIZE(da9055_regulator_info); i++) {
#2 lore raw

PATCH 1/1 da905x: Add const to da905x_regulator_info blocks

Le 09.09.2016 10:56, Joe Perches a ?crit?:

Quoted 4 lines

Hi Julia.

Could coccinelle identify non-const arrays that are never modified by anything and add const like this patch below by some mechanism?

If you know the type that should be const, then Coccinlle can add the consts everywhere.

Previously, I was collecting top-level structures that contain only function pointers and speculatively adding const on them, I would submit the patch if gcc compiled all of the files containing the structure and didn't complain.

When you move away from structures with fields that are function pointers,
perhaps the chance that a field is modified increases, so that is why I focused only on function pointers. If it is eg likely that arrays are not
modified, then one could apply the same methodology to them.

Coccinelle doesn't always have complete type information, because it doesn't necessarily have access to all header files, so it is not clear that it could be useful for it to blindly search for all structures that are used in a read-only way.

Currently, I am just looking at what can be done with existing const annotations. If an existing const structure is eg only stored in a certain field or only passed as an argument to a certain function, then other structures that are not currently annotated as const, but that are only used in those ways, can be annotated as const as well. This approach
gives lots of results, and even better causes the construction of some semantic patches that could be integrated into the kernel (not done yet) to be used in the future. It is also totally insensitive to the types of
the field. On the other hand, it is not helpful when there are no const annotations at all related to a given type, but actually everything could
be const. The latter cases can be handled by the previous approach.

julia

Quoted 311 lines

---

Quoted 308 lines · Joe Perches

Moving data to text is a good thing.

Mark the regulator_info structs as const and change the pointers to const.

$ size drivers/regulator/*.o*
   text	   data	    bss	    dec	    hex	filename
   7455	    100	      0	   7555	   
1d83	drivers/regulator/da9052-regulator.o.new
   2111	   5392	      0	   7503	   
1d4f	drivers/regulator/da9052-regulator.o.old
   4321	    100	      0	   4421	   
1145	drivers/regulator/da9055-regulator.o.new
   2611	   1800	      0	   4411	   
113b	drivers/regulator/da9055-regulator.o.old
---
 drivers/regulator/da9052-regulator.c | 37 
++++++++++++++++++------------------
 drivers/regulator/da9055-regulator.c | 32 
+++++++++++++++----------------
 2 files changed, 34 insertions(+), 35 deletions(-)
drivers/regulator/da9052-regulator.c +7 -7
index 9ececfe..184ff1d 100644
@@ -75,11 +75,11 @@ struct da9052_regulator_info {
 
 struct da9052_regulator {
 	struct da9052 *da9052;
-	struct da9052_regulator_info *info;
+	const struct da9052_regulator_info *info;
 	struct regulator_dev *rdev;
 };
 
-static int verify_range(struct da9052_regulator_info *info,
+static int verify_range(const struct da9052_regulator_info *info,
 			 int min_uV, int max_uV)
 {
 	if (min_uV > info->max_uV || max_uV < info->min_uV)
@@ -159,7 +159,7 @@ static int da9052_list_voltage(struct 
 regulator_dev *rdev,
 				unsigned int selector)
 {
 	struct da9052_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9052_regulator_info *info = regulator->info;
+	const struct da9052_regulator_info *info = regulator->info;
 	int id = rdev_get_id(rdev);
 	int volt_uV;
@@ -183,7 +183,7 @@ static int da9052_map_voltage(struct regulator_dev 
 *rdev,
 			      int min_uV, int max_uV)
 {
 	struct da9052_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9052_regulator_info *info = regulator->info;
+	const struct da9052_regulator_info *info = regulator->info;
 	int id = rdev_get_id(rdev);
 	int ret, sel;
@@ -214,7 +214,7 @@ static int da9052_regulator_set_voltage_sel(struct 
 regulator_dev *rdev,
 					    unsigned int selector)
 {
 	struct da9052_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9052_regulator_info *info = regulator->info;
+	const struct da9052_regulator_info *info = regulator->info;
 	int id = rdev_get_id(rdev);
 	int ret;
@@ -245,7 +245,7 @@ static int 
 da9052_regulator_set_voltage_time_sel(struct regulator_dev *rdev,
 						 unsigned int new_sel)
 {
 	struct da9052_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9052_regulator_info *info = regulator->info;
+	const struct da9052_regulator_info *info = regulator->info;
 	int id = rdev_get_id(rdev);
 	int ret = 0;
@@ -330,7 +330,7 @@ static const struct regulator_ops da9052_ldo_ops = 
 {
 	.activate_bit = (abits),\
 }
 
-static struct da9052_regulator_info da9052_regulator_info[] = {
+static const struct da9052_regulator_info da9052_regulator_info[] = {
 	DA9052_DCDC(BUCK1, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBCOREGO),
 	DA9052_DCDC(BUCK2, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBPROGO),
drivers/regulator/da9052-regulator.c +1 -1
 	DA9052_DCDC(BUCK3, 25, 950, 2525, 6, 6, DA9052_SUPPLY_VBMEMGO),
@@ -347,7 +347,7 @@ static struct da9052_regulator_info 
 da9052_regulator_info[] = {
 	DA9052_LDO(LDO10, 50, 1200, 3600, 6, 6, 0),
 };
 
-static struct da9052_regulator_info da9053_regulator_info[] = {
+static const struct da9052_regulator_info da9053_regulator_info[] = {
 	DA9052_DCDC(BUCK1, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBCOREGO),
 	DA9052_DCDC(BUCK2, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBPROGO),
drivers/regulator/da9052-regulator.c +3 -3
 	DA9052_DCDC(BUCK3, 25, 950, 2525, 6, 6, DA9052_SUPPLY_VBMEMGO),
@@ -364,10 +364,10 @@ static struct da9052_regulator_info 
 da9053_regulator_info[] = {
 	DA9052_LDO(LDO10, 50, 1200, 3600, 6, 6, 0),
 };
 
-static inline struct da9052_regulator_info *find_regulator_info(u8 
 chip_id,
-								 int id)
+static inline const struct da9052_regulator_info *
+find_regulator_info(u8 chip_id, int id)
 {
-	struct da9052_regulator_info *info;
+	const struct da9052_regulator_info *info;
 	int i;
drivers/regulator/da9052-regulator.c +7 -8
 	switch (chip_id) {
@@ -435,14 +435,13 @@ static int da9052_regulator_probe(struct 
 platform_device *pdev)
 			return -ENODEV;
 
 		for_each_child_of_node(nproot, np) {
-			if (!of_node_cmp(np->name,
-					 regulator->info->reg_desc.name)) {
-				config.init_data = of_get_regulator_init_data(
-					&pdev->dev, np,
-					&regulator->info->reg_desc);
-				config.of_node = np;
-				break;
-			}
+			if (of_node_cmp(np->name, regulator->info->reg_desc.name))
+				continue;
+			config.init_data =
+				of_get_regulator_init_data(&pdev->dev, np,
+							   &regulator->info->reg_desc);
+			config.of_node = np;
+			break;
 		}
 		of_node_put(nproot);

#endif

drivers/regulator/da9055-regulator.c +3 -3
index d029c94..019df70 100644
@@ -77,7 +77,7 @@ struct da9055_regulator_info {
 
 struct da9055_regulator {
 	struct da9055 *da9055;
-	struct da9055_regulator_info *info;
+	const struct da9055_regulator_info *info;
 	struct regulator_dev *rdev;
 	enum gpio_select reg_rselect;
 };
@@ -85,7 +85,7 @@ struct da9055_regulator {
 static unsigned int da9055_buck_get_mode(struct regulator_dev *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret, mode = 0;
 
 	ret = da9055_reg_read(regulator->da9055, info->mode.reg);
@@ -111,7 +111,7 @@ static int da9055_buck_set_mode(struct 
 regulator_dev *rdev,
 					unsigned int mode)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int val = 0;
 
drivers/regulator/da9055-regulator.c +1 -1
 	switch (mode) {
@@ -133,7 +133,7 @@ static int da9055_buck_set_mode(struct 
 regulator_dev *rdev,
 static unsigned int da9055_ldo_get_mode(struct regulator_dev *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret;
 
drivers/regulator/da9055-regulator.c +1 -1
 	ret = da9055_reg_read(regulator->da9055, info->volt.reg_b);
@@ -149,7 +149,7 @@ static unsigned int da9055_ldo_get_mode(struct 
 regulator_dev *rdev)
 static int da9055_ldo_set_mode(struct regulator_dev *rdev, unsigned 
 int mode)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	struct da9055_volt_reg volt = info->volt;
drivers/regulator/da9055-regulator.c +1 -1
 	int val = 0;
@@ -171,7 +171,7 @@ static int da9055_ldo_set_mode(struct 
 regulator_dev *rdev, unsigned int mode)
 static int da9055_buck_get_current_limit(struct regulator_dev *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret;
 
drivers/regulator/da9055-regulator.c +1 -1
 	ret = da9055_reg_read(regulator->da9055, DA9055_REG_BUCK_LIM);
@@ -186,7 +186,7 @@ static int da9055_buck_set_current_limit(struct 
 regulator_dev *rdev, int min_uA,
 					 int max_uA)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int i;
 
drivers/regulator/da9055-regulator.c +1 -1
 	for (i = ARRAY_SIZE(da9055_current_limits) - 1; i >= 0; i--) {
@@ -204,7 +204,7 @@ static int da9055_buck_set_current_limit(struct 
 regulator_dev *rdev, int min_uA,
 static int da9055_regulator_get_voltage_sel(struct regulator_dev 
 *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	struct da9055_volt_reg volt = info->volt;
drivers/regulator/da9055-regulator.c +1 -1
 	int ret, sel;
@@ -236,7 +236,7 @@ static int da9055_regulator_set_voltage_sel(struct 
 regulator_dev *rdev,
 					    unsigned int selector)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret;
 
drivers/regulator/da9055-regulator.c +1 -1
 	/*
@@ -279,7 +279,7 @@ static int 
 da9055_regulator_set_suspend_voltage(struct regulator_dev *rdev,
 						int uV)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret;
 
drivers/regulator/da9055-regulator.c +1 -1
 	/* Select register set B for suspend voltage ramping. */
@@ -301,7 +301,7 @@ static int 
 da9055_regulator_set_suspend_voltage(struct regulator_dev *rdev,
 static int da9055_suspend_enable(struct regulator_dev *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 
 	/* Select register set B for voltage ramping. */
drivers/regulator/da9055-regulator.c +1 -1
 	if (regulator->reg_rselect == NO_GPIO)
@@ -314,7 +314,7 @@ static int da9055_suspend_enable(struct 
 regulator_dev *rdev)
 static int da9055_suspend_disable(struct regulator_dev *rdev)
 {
 	struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 
 	/* Diselect register set B. */
drivers/regulator/da9055-regulator.c +1 -1
 	if (regulator->reg_rselect == NO_GPIO)
@@ -425,7 +425,7 @@ static const struct regulator_ops da9055_ldo_ops = 
 {
 	},
 }
 
-static struct da9055_regulator_info da9055_regulator_info[] = {
+static const struct da9055_regulator_info da9055_regulator_info[] = {
 	DA9055_BUCK(BUCK1, 25, 725, 2075, 6, 9, 0xc, 2),
 	DA9055_BUCK(BUCK2, 25, 925, 2500, 6, 0, 3, 0),
drivers/regulator/da9055-regulator.c +1 -1
 	DA9055_LDO(LDO1, 50, 900, 3300, 6, 2),
@@ -445,7 +445,7 @@ static int da9055_gpio_init(struct 
 da9055_regulator *regulator,
 			    struct regulator_config *config,
 			    struct da9055_pdata *pdata, int id)
 {
-	struct da9055_regulator_info *info = regulator->info;
+	const struct da9055_regulator_info *info = regulator->info;
 	int ret = 0;
 
drivers/regulator/da9055-regulator.c +2 -2
 	if (!pdata)
@@ -521,9 +521,9 @@ static irqreturn_t da9055_ldo5_6_oc_irq(int irq, 
 void *data)
 	return IRQ_HANDLED;
 }
 
-static inline struct da9055_regulator_info *find_regulator_info(int 
 id)
+static inline const struct da9055_regulator_info 
 *find_regulator_info(int id)
 {
-	struct da9055_regulator_info *info;
+	const struct da9055_regulator_info *info;
drivers/regulator/da9055-regulator.c +0 -0
 	int i;
 
 	for (i = 0; i < ARRAY_SIZE(da9055_regulator_info); i++) {
#3 lore raw

PATCH 1/1 da905x: Add const to da905x_regulator_info blocks

Quoted 5 lines · Julia Lawall

Le 09.09.2016 10:56, Joe Perches a ?crit?:

Quoted 2 lines

Could coccinelle identify non-const arrays that are never modified by anything and add const like this patch below by some mechanism?

If you know the type that should be const, then Coccinlle can add the consts everywhere.

Sure, but the fundamental here is that you don't know that the type _could_ be const.

Quoted 4 lines

Coccinelle doesn't always have complete type information, because it doesn't necessarily have access to all header files, so it is not clear that it could be useful for it to blindly search for all structures that are used in a read-only way.

In the example given the struct definitions are file local.

It's not an easy problem but it could be worthwhile when all structure members are never modified after initialization.

#4 lore raw

PATCH 1/1 da905x: Add const to da905x_regulator_info blocks

Le 09.09.2016 12:38, Joe Perches a ?crit?:

Quoted 17 lines · Julia Lawall
Quoted 5 lines

Le 09.09.2016 10:56, Joe Perches a ?crit?:

Quoted 2 lines

Could coccinelle identify non-const arrays that are never modified by anything and add const like this patch below by some mechanism?

If you know the type that should be const, then Coccinlle can add the consts everywhere.

Sure, but the fundamental here is that you don't know that the type _could_ be const.

Quoted 6 lines

Coccinelle doesn't always have complete type information, because it doesn't necessarily have access to all header files, so it is not clear
that it could be useful for it to blindly search for all structures that
are used in a read-only way.

Quoted 4 lines

In the example given the struct definitions are file local.

It's not an easy problem but it could be worthwhile when all structure members are never modified after initialization.

If the structure type is file-local, it could indeed be possible to do something. Thanks for the suggestion.

julia

#5 lore raw

[Cocci] Marking data structures as "const" (like da905x_regulator_info blocks)?

Quoted 4 lines
Quoted 2 lines

It's not an easy problem but it could be worthwhile when all structure members are never modified after initialization.

If the structure type is file-local,

This scope limitation sounds promising. Some source code analysis seems to be easier when you can be sure that all the information you need for a specific task is contained in a single file.

Quoted 1 line

it could indeed be possible to do something.

I imagine that a general software development challenge remains for further considerations and corresponding technology research. How will the available software tools become better
in data flow analysis?

Regards,
Makrus