Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

media: m5mols: Convert to use GPIO descriptors

The Fujitsu M5MOLS sensor driver is using a reset GPIO number
passed from platform data.

No machine/board descriptor file in the kernel is using this so
let's replace it with a GPIO descriptor.

Cc: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Heungjun Kim <riverful.kim@samsung.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>

authored by

Linus Walleij and committed by
Sakari Ailus
aaaf357f b70f5cd8

+12 -24
+2
drivers/media/i2c/m5mols/m5mols.h
··· 13 13 #define M5MOLS_H 14 14 15 15 #include <linux/sizes.h> 16 + #include <linux/gpio/consumer.h> 16 17 #include <media/v4l2-subdev.h> 17 18 #include "m5mols_reg.h" 18 19 ··· 225 224 struct v4l2_ctrl *jpeg_quality; 226 225 227 226 int (*set_power)(struct device *dev, int on); 227 + struct gpio_desc *reset; 228 228 229 229 struct mutex lock; 230 230
-1
drivers/media/i2c/m5mols/m5mols_capture.c
··· 15 15 #include <linux/irq.h> 16 16 #include <linux/interrupt.h> 17 17 #include <linux/delay.h> 18 - #include <linux/gpio.h> 19 18 #include <linux/regulator/consumer.h> 20 19 #include <linux/videodev2.h> 21 20 #include <media/v4l2-ctrls.h>
+10 -19
drivers/media/i2c/m5mols/m5mols_core.c
··· 14 14 #include <linux/irq.h> 15 15 #include <linux/interrupt.h> 16 16 #include <linux/delay.h> 17 - #include <linux/gpio.h> 17 + #include <linux/gpio/consumer.h> 18 18 #include <linux/regulator/consumer.h> 19 19 #include <linux/videodev2.h> 20 20 #include <linux/module.h> ··· 752 752 { 753 753 struct v4l2_subdev *sd = &info->sd; 754 754 struct i2c_client *client = v4l2_get_subdevdata(sd); 755 - const struct m5mols_platform_data *pdata = info->pdata; 756 755 int ret; 757 756 758 757 if (info->power == enable) ··· 771 772 return ret; 772 773 } 773 774 774 - gpio_set_value(pdata->gpio_reset, !pdata->reset_polarity); 775 + gpiod_set_value(info->reset, 0); 775 776 info->power = 1; 776 777 777 778 return ret; ··· 784 785 if (info->set_power) 785 786 info->set_power(&client->dev, 0); 786 787 787 - gpio_set_value(pdata->gpio_reset, pdata->reset_polarity); 788 + gpiod_set_value(info->reset, 1); 788 789 789 790 info->isp_ready = 0; 790 791 info->power = 0; ··· 943 944 const struct i2c_device_id *id) 944 945 { 945 946 const struct m5mols_platform_data *pdata = client->dev.platform_data; 946 - unsigned long gpio_flags; 947 947 struct m5mols_info *info; 948 948 struct v4l2_subdev *sd; 949 949 int ret; 950 950 951 951 if (pdata == NULL) { 952 952 dev_err(&client->dev, "No platform data\n"); 953 - return -EINVAL; 954 - } 955 - 956 - if (!gpio_is_valid(pdata->gpio_reset)) { 957 - dev_err(&client->dev, "No valid RESET GPIO specified\n"); 958 953 return -EINVAL; 959 954 } 960 955 ··· 961 968 if (!info) 962 969 return -ENOMEM; 963 970 971 + /* This asserts reset, descriptor shall have polarity specified */ 972 + info->reset = devm_gpiod_get(&client->dev, "reset", GPIOD_OUT_HIGH); 973 + if (IS_ERR(info->reset)) 974 + return PTR_ERR(info->reset); 975 + /* Notice: the "N" in M5MOLS_NRST implies active low */ 976 + gpiod_set_consumer_name(info->reset, "M5MOLS_NRST"); 977 + 964 978 info->pdata = pdata; 965 979 info->set_power = pdata->set_power; 966 - 967 - gpio_flags = pdata->reset_polarity 968 - ? GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW; 969 - ret = devm_gpio_request_one(&client->dev, pdata->gpio_reset, gpio_flags, 970 - "M5MOLS_NRST"); 971 - if (ret) { 972 - dev_err(&client->dev, "Failed to request gpio: %d\n", ret); 973 - return ret; 974 - } 975 980 976 981 ret = devm_regulator_bulk_get(&client->dev, ARRAY_SIZE(supplies), 977 982 supplies);
-4
include/media/i2c/m5mols.h
··· 14 14 15 15 /** 16 16 * struct m5mols_platform_data - platform data for M-5MOLS driver 17 - * @gpio_reset: GPIO driving the reset pin of M-5MOLS 18 - * @reset_polarity: active state for gpio_reset pin, 0 or 1 19 17 * @set_power: an additional callback to the board setup code 20 18 * to be called after enabling and before disabling 21 19 * the sensor's supply regulators 22 20 */ 23 21 struct m5mols_platform_data { 24 - int gpio_reset; 25 - u8 reset_polarity; 26 22 int (*set_power)(struct device *dev, int on); 27 23 }; 28 24