iio: adc: Constify struct iio_map

'struct iio_map' are not modified in these drivers.

Constifying this structure moves some data to a read-only section, so
increase overall security.

In order to do it, the prototype of iio_map_array_register() and
devm_iio_map_array_register(), and a few structures that hold a
"struct iio_map *" need to be adjusted.

On a x86_64, with allmodconfig, as an example:
Before:
======
   text	   data	    bss	    dec	    hex	filename
  21086	    760	      0	  21846	   5556	drivers/iio/adc/axp20x_adc.o

After:
=====
   text	   data	    bss	    dec	    hex	filename
  21470	    360	      0	  21830	   5546	drivers/iio/adc/axp20x_adc.o
  33842	   1697	    384	  35923	   8c53	drivers/iio/addac/ad74413r.o

--
Compile tested only

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://patch.msgid.link/5729dc3cc3892ecf0d8ea28c5f7307b34e27493e.1725729801.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
Christophe JAILLET 2024-09-07 19:24:46 +02:00 committed by Jonathan Cameron
parent 482447fd6f
commit faf1786077
10 changed files with 19 additions and 17 deletions

View File

@ -155,7 +155,7 @@ enum axp813_adc_channel_v {
AXP813_BATT_V, AXP813_BATT_V,
}; };
static struct iio_map axp20x_maps[] = { static const struct iio_map axp20x_maps[] = {
{ {
.consumer_dev_name = "axp20x-usb-power-supply", .consumer_dev_name = "axp20x-usb-power-supply",
.consumer_channel = "vbus_v", .consumer_channel = "vbus_v",
@ -187,7 +187,7 @@ static struct iio_map axp20x_maps[] = {
}, { /* sentinel */ } }, { /* sentinel */ }
}; };
static struct iio_map axp22x_maps[] = { static const struct iio_map axp22x_maps[] = {
{ {
.consumer_dev_name = "axp20x-battery-power-supply", .consumer_dev_name = "axp20x-battery-power-supply",
.consumer_channel = "batt_v", .consumer_channel = "batt_v",
@ -1044,7 +1044,7 @@ struct axp_data {
unsigned long adc_en2_mask; unsigned long adc_en2_mask;
int (*adc_rate)(struct axp20x_adc_iio *info, int (*adc_rate)(struct axp20x_adc_iio *info,
int rate); int rate);
struct iio_map *maps; const struct iio_map *maps;
}; };
static const struct axp_data axp192_data = { static const struct axp_data axp192_data = {

View File

@ -103,7 +103,7 @@ static const struct iio_chan_spec axp288_adc_channels[] = {
}; };
/* for consumer drivers */ /* for consumer drivers */
static struct iio_map axp288_adc_default_maps[] = { static const struct iio_map axp288_adc_default_maps[] = {
IIO_MAP("TS_PIN", "axp288-batt", "axp288-batt-temp"), IIO_MAP("TS_PIN", "axp288-batt", "axp288-batt-temp"),
IIO_MAP("PMIC_TEMP", "axp288-pmic", "axp288-pmic-temp"), IIO_MAP("PMIC_TEMP", "axp288-pmic", "axp288-pmic-temp"),
IIO_MAP("GPADC", "axp288-gpadc", "axp288-system-temp"), IIO_MAP("GPADC", "axp288-gpadc", "axp288-system-temp"),

View File

@ -291,7 +291,7 @@ static const struct iio_chan_spec da9150_gpadc_channels[] = {
}; };
/* Default maps used by da9150-charger */ /* Default maps used by da9150-charger */
static struct iio_map da9150_gpadc_default_maps[] = { static const struct iio_map da9150_gpadc_default_maps[] = {
{ {
.consumer_dev_name = "da9150-charger", .consumer_dev_name = "da9150-charger",
.consumer_channel = "CHAN_IBUS", .consumer_channel = "CHAN_IBUS",

View File

@ -164,7 +164,7 @@ static const struct iio_chan_spec mrfld_adc_channels[] = {
BCOVE_ADC_CHANNEL(IIO_TEMP, 8, "CH8", 0xC6), BCOVE_ADC_CHANNEL(IIO_TEMP, 8, "CH8", 0xC6),
}; };
static struct iio_map iio_maps[] = { static const struct iio_map iio_maps[] = {
IIO_MAP("CH0", "bcove-battery", "VBATRSLT"), IIO_MAP("CH0", "bcove-battery", "VBATRSLT"),
IIO_MAP("CH1", "bcove-battery", "BATTID"), IIO_MAP("CH1", "bcove-battery", "BATTID"),
IIO_MAP("CH2", "bcove-battery", "IBATRSLT"), IIO_MAP("CH2", "bcove-battery", "IBATRSLT"),

View File

@ -26,7 +26,7 @@
struct lp8788_adc { struct lp8788_adc {
struct lp8788 *lp; struct lp8788 *lp;
struct iio_map *map; const struct iio_map *map;
struct mutex lock; struct mutex lock;
}; };
@ -149,7 +149,7 @@ static const struct iio_chan_spec lp8788_adc_channels[] = {
}; };
/* default maps used by iio consumer (lp8788-charger driver) */ /* default maps used by iio consumer (lp8788-charger driver) */
static struct iio_map lp8788_default_iio_maps[] = { static const struct iio_map lp8788_default_iio_maps[] = {
{ {
.consumer_dev_name = "lp8788-charger", .consumer_dev_name = "lp8788-charger",
.consumer_channel = "lp8788_vbatt_5p0", .consumer_channel = "lp8788_vbatt_5p0",
@ -168,7 +168,7 @@ static int lp8788_iio_map_register(struct device *dev,
struct lp8788_platform_data *pdata, struct lp8788_platform_data *pdata,
struct lp8788_adc *adc) struct lp8788_adc *adc)
{ {
struct iio_map *map; const struct iio_map *map;
int ret; int ret;
map = (!pdata || !pdata->adc_pdata) ? map = (!pdata || !pdata->adc_pdata) ?

View File

@ -52,7 +52,7 @@ static struct iio_chan_spec mp2629_channels[] = {
MP2629_ADC_CHAN(INPUT_CURRENT, IIO_CURRENT) MP2629_ADC_CHAN(INPUT_CURRENT, IIO_CURRENT)
}; };
static struct iio_map mp2629_adc_maps[] = { static const struct iio_map mp2629_adc_maps[] = {
MP2629_MAP(BATT_VOLT, "batt-volt"), MP2629_MAP(BATT_VOLT, "batt-volt"),
MP2629_MAP(SYSTEM_VOLT, "system-volt"), MP2629_MAP(SYSTEM_VOLT, "system-volt"),
MP2629_MAP(INPUT_VOLT, "input-volt"), MP2629_MAP(INPUT_VOLT, "input-volt"),

View File

@ -185,7 +185,7 @@ static const struct iio_chan_spec rn5t618_adc_iio_channels[] = {
RN5T618_ADC_CHANNEL(AIN0, IIO_VOLTAGE, "AIN0") RN5T618_ADC_CHANNEL(AIN0, IIO_VOLTAGE, "AIN0")
}; };
static struct iio_map rn5t618_maps[] = { static const struct iio_map rn5t618_maps[] = {
IIO_MAP("VADP", "rn5t618-power", "vadp"), IIO_MAP("VADP", "rn5t618-power", "vadp"),
IIO_MAP("VUSB", "rn5t618-power", "vusb"), IIO_MAP("VUSB", "rn5t618-power", "vusb"),
{ /* sentinel */ } { /* sentinel */ }

View File

@ -114,7 +114,7 @@ struct sun4i_gpadc_iio {
.datasheet_name = _name, \ .datasheet_name = _name, \
} }
static struct iio_map sun4i_gpadc_hwmon_maps[] = { static const struct iio_map sun4i_gpadc_hwmon_maps[] = {
{ {
.adc_channel_label = "temp_adc", .adc_channel_label = "temp_adc",
.consumer_dev_name = "iio_hwmon.0", .consumer_dev_name = "iio_hwmon.0",

View File

@ -20,7 +20,7 @@
struct iio_map_internal { struct iio_map_internal {
struct iio_dev *indio_dev; struct iio_dev *indio_dev;
struct iio_map *map; const struct iio_map *map;
struct list_head l; struct list_head l;
}; };
@ -42,7 +42,7 @@ static int iio_map_array_unregister_locked(struct iio_dev *indio_dev)
return ret; return ret;
} }
int iio_map_array_register(struct iio_dev *indio_dev, struct iio_map *maps) int iio_map_array_register(struct iio_dev *indio_dev, const struct iio_map *maps)
{ {
struct iio_map_internal *mapi; struct iio_map_internal *mapi;
int i = 0; int i = 0;
@ -86,7 +86,8 @@ static void iio_map_array_unregister_cb(void *indio_dev)
iio_map_array_unregister(indio_dev); iio_map_array_unregister(indio_dev);
} }
int devm_iio_map_array_register(struct device *dev, struct iio_dev *indio_dev, struct iio_map *maps) int devm_iio_map_array_register(struct device *dev, struct iio_dev *indio_dev,
const struct iio_map *maps)
{ {
int ret; int ret;

View File

@ -18,7 +18,7 @@ struct iio_map;
* @map: array of mappings specifying association of channel with client * @map: array of mappings specifying association of channel with client
*/ */
int iio_map_array_register(struct iio_dev *indio_dev, int iio_map_array_register(struct iio_dev *indio_dev,
struct iio_map *map); const struct iio_map *map);
/** /**
* iio_map_array_unregister() - tell the core to remove consumer mappings for * iio_map_array_unregister() - tell the core to remove consumer mappings for
@ -38,6 +38,7 @@ int iio_map_array_unregister(struct iio_dev *indio_dev);
* handle de-registration of the IIO map object when the device's refcount goes to * handle de-registration of the IIO map object when the device's refcount goes to
* zero. * zero.
*/ */
int devm_iio_map_array_register(struct device *dev, struct iio_dev *indio_dev, struct iio_map *maps); int devm_iio_map_array_register(struct device *dev, struct iio_dev *indio_dev,
const struct iio_map *maps);
#endif #endif