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>
This commit is contained in:
parent
b70f5cd874
commit
aaaf357fa6
|
@ -13,6 +13,7 @@
|
|||
#define M5MOLS_H
|
||||
|
||||
#include <linux/sizes.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <media/v4l2-subdev.h>
|
||||
#include "m5mols_reg.h"
|
||||
|
||||
|
@ -224,6 +225,7 @@ struct m5mols_info {
|
|||
struct v4l2_ctrl *jpeg_quality;
|
||||
|
||||
int (*set_power)(struct device *dev, int on);
|
||||
struct gpio_desc *reset;
|
||||
|
||||
struct mutex lock;
|
||||
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
#include <linux/irq.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/videodev2.h>
|
||||
#include <media/v4l2-ctrls.h>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include <linux/irq.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/videodev2.h>
|
||||
#include <linux/module.h>
|
||||
|
@ -752,7 +752,6 @@ static int m5mols_sensor_power(struct m5mols_info *info, bool enable)
|
|||
{
|
||||
struct v4l2_subdev *sd = &info->sd;
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
const struct m5mols_platform_data *pdata = info->pdata;
|
||||
int ret;
|
||||
|
||||
if (info->power == enable)
|
||||
|
@ -772,7 +771,7 @@ static int m5mols_sensor_power(struct m5mols_info *info, bool enable)
|
|||
return ret;
|
||||
}
|
||||
|
||||
gpio_set_value(pdata->gpio_reset, !pdata->reset_polarity);
|
||||
gpiod_set_value(info->reset, 0);
|
||||
info->power = 1;
|
||||
|
||||
return ret;
|
||||
|
@ -785,7 +784,7 @@ static int m5mols_sensor_power(struct m5mols_info *info, bool enable)
|
|||
if (info->set_power)
|
||||
info->set_power(&client->dev, 0);
|
||||
|
||||
gpio_set_value(pdata->gpio_reset, pdata->reset_polarity);
|
||||
gpiod_set_value(info->reset, 1);
|
||||
|
||||
info->isp_ready = 0;
|
||||
info->power = 0;
|
||||
|
@ -944,7 +943,6 @@ static int m5mols_probe(struct i2c_client *client,
|
|||
const struct i2c_device_id *id)
|
||||
{
|
||||
const struct m5mols_platform_data *pdata = client->dev.platform_data;
|
||||
unsigned long gpio_flags;
|
||||
struct m5mols_info *info;
|
||||
struct v4l2_subdev *sd;
|
||||
int ret;
|
||||
|
@ -954,11 +952,6 @@ static int m5mols_probe(struct i2c_client *client,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!gpio_is_valid(pdata->gpio_reset)) {
|
||||
dev_err(&client->dev, "No valid RESET GPIO specified\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!client->irq) {
|
||||
dev_err(&client->dev, "Interrupt not assigned\n");
|
||||
return -EINVAL;
|
||||
|
@ -968,18 +961,16 @@ static int m5mols_probe(struct i2c_client *client,
|
|||
if (!info)
|
||||
return -ENOMEM;
|
||||
|
||||
/* This asserts reset, descriptor shall have polarity specified */
|
||||
info->reset = devm_gpiod_get(&client->dev, "reset", GPIOD_OUT_HIGH);
|
||||
if (IS_ERR(info->reset))
|
||||
return PTR_ERR(info->reset);
|
||||
/* Notice: the "N" in M5MOLS_NRST implies active low */
|
||||
gpiod_set_consumer_name(info->reset, "M5MOLS_NRST");
|
||||
|
||||
info->pdata = pdata;
|
||||
info->set_power = pdata->set_power;
|
||||
|
||||
gpio_flags = pdata->reset_polarity
|
||||
? GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
|
||||
ret = devm_gpio_request_one(&client->dev, pdata->gpio_reset, gpio_flags,
|
||||
"M5MOLS_NRST");
|
||||
if (ret) {
|
||||
dev_err(&client->dev, "Failed to request gpio: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = devm_regulator_bulk_get(&client->dev, ARRAY_SIZE(supplies),
|
||||
supplies);
|
||||
if (ret) {
|
||||
|
|
|
@ -14,15 +14,11 @@
|
|||
|
||||
/**
|
||||
* struct m5mols_platform_data - platform data for M-5MOLS driver
|
||||
* @gpio_reset: GPIO driving the reset pin of M-5MOLS
|
||||
* @reset_polarity: active state for gpio_reset pin, 0 or 1
|
||||
* @set_power: an additional callback to the board setup code
|
||||
* to be called after enabling and before disabling
|
||||
* the sensor's supply regulators
|
||||
*/
|
||||
struct m5mols_platform_data {
|
||||
int gpio_reset;
|
||||
u8 reset_polarity;
|
||||
int (*set_power)(struct device *dev, int on);
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue