]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
iio: adc: Constify struct iio_map
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sat, 7 Sep 2024 17:24:46 +0000 (19:24 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Mon, 30 Sep 2024 08:21:02 +0000 (09:21 +0100)
'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>
drivers/iio/adc/axp20x_adc.c
drivers/iio/adc/axp288_adc.c
drivers/iio/adc/da9150-gpadc.c
drivers/iio/adc/intel_mrfld_adc.c
drivers/iio/adc/lp8788_adc.c
drivers/iio/adc/mp2629_adc.c
drivers/iio/adc/rn5t618-adc.c
drivers/iio/adc/sun4i-gpadc-iio.c
drivers/iio/inkern.c
include/linux/iio/driver.h

index d43c8d124a0c7d01b0de89251315b6f35a5e8352..940c92f2792a5706f57b51f9bcbd54b5a9dad0e6 100644 (file)
@@ -155,7 +155,7 @@ enum axp813_adc_channel_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_channel = "vbus_v",
@@ -187,7 +187,7 @@ static struct iio_map axp20x_maps[] = {
        }, { /* sentinel */ }
 };
 
-static struct iio_map axp22x_maps[] = {
+static const struct iio_map axp22x_maps[] = {
        {
                .consumer_dev_name = "axp20x-battery-power-supply",
                .consumer_channel = "batt_v",
@@ -1044,7 +1044,7 @@ struct axp_data {
        unsigned long                   adc_en2_mask;
        int                             (*adc_rate)(struct axp20x_adc_iio *info,
                                                    int rate);
-       struct iio_map                  *maps;
+       const struct iio_map            *maps;
 };
 
 static const struct axp_data axp192_data = {
index 8c3acc0cd7e99a4f378bc630f4e9eb3671e45348..45542efc3ece0c1ca28becba494b8f9826ee43bd 100644 (file)
@@ -103,7 +103,7 @@ static const struct iio_chan_spec axp288_adc_channels[] = {
 };
 
 /* 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("PMIC_TEMP", "axp288-pmic", "axp288-pmic-temp"),
        IIO_MAP("GPADC", "axp288-gpadc", "axp288-system-temp"),
index 8f0d3fb63b677c8e4834363762a01cb38ec42743..82628746ba8e8d0f3326451c383dc9c7c2f6eb2d 100644 (file)
@@ -291,7 +291,7 @@ static const struct iio_chan_spec da9150_gpadc_channels[] = {
 };
 
 /* 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_channel = "CHAN_IBUS",
index 0590a126f3218a9302b2bdfb8f965c0310562595..30c8c09e371616364c3cc88055c161fbf6af0239 100644 (file)
@@ -164,7 +164,7 @@ static const struct iio_chan_spec mrfld_adc_channels[] = {
        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("CH1", "bcove-battery", "BATTID"),
        IIO_MAP("CH2", "bcove-battery", "IBATRSLT"),
index 6d9b354bc705bb712dbed6c1ae588e50c76d522a..0d49be0061a207f729c0410df108598d9f6e0a2d 100644 (file)
@@ -26,7 +26,7 @@
 
 struct lp8788_adc {
        struct lp8788 *lp;
-       struct iio_map *map;
+       const struct iio_map *map;
        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) */
-static struct iio_map lp8788_default_iio_maps[] = {
+static const struct iio_map lp8788_default_iio_maps[] = {
        {
                .consumer_dev_name = "lp8788-charger",
                .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_adc *adc)
 {
-       struct iio_map *map;
+       const struct iio_map *map;
        int ret;
 
        map = (!pdata || !pdata->adc_pdata) ?
index 5fbf9b6abd9c7c05322a305f7b315c75f6d179a5..921d3e1937529f0fca731bbb8082c84a9cb3ef6f 100644 (file)
@@ -52,7 +52,7 @@ static struct iio_chan_spec mp2629_channels[] = {
        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(SYSTEM_VOLT, "system-volt"),
        MP2629_MAP(INPUT_VOLT, "input-volt"),
index ce5f3011fe00c45f56a109821526d2dc4171508d..b33536157adc998668d4d0c6d6a3e806d28381a1 100644 (file)
@@ -185,7 +185,7 @@ static const struct iio_chan_spec rn5t618_adc_iio_channels[] = {
        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("VUSB", "rn5t618-power", "vusb"),
        { /* sentinel */ }
index 100ecced5fc11aa1882bff154b2756e30f01d9c9..5d459f0506349409c0ddc7d8ba9470e6ce801a47 100644 (file)
@@ -114,7 +114,7 @@ struct sun4i_gpadc_iio {
        .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",
                .consumer_dev_name = "iio_hwmon.0",
index 151099be2863c63003f4d894d4d1a2556fe38c8f..7f325b3ed08fae6674245312cf8f57bb151006c0 100644 (file)
@@ -20,7 +20,7 @@
 
 struct iio_map_internal {
        struct iio_dev *indio_dev;
-       struct iio_map *map;
+       const struct iio_map *map;
        struct list_head l;
 };
 
@@ -42,7 +42,7 @@ static int iio_map_array_unregister_locked(struct iio_dev *indio_dev)
        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;
        int i = 0;
@@ -86,7 +86,8 @@ static void iio_map_array_unregister_cb(void *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;
 
index 7a157ed218f602885470883e3cccaaeeca73fba3..7f8b55551ed017f8e78a25a055f86bbb65aa76e1 100644 (file)
@@ -18,7 +18,7 @@ struct iio_map;
  * @map:       array of mappings specifying association of channel with client
  */
 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
@@ -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
  * 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