2019-10-07 13:31:41

by Ricardo Ribalda Delgado

[permalink] [raw]
Subject: [PATCH v8 0/6] ad5820: Multiple fixes

-Support for enable-pin, of-autoload, enable-gpios and ad5821 and ad5823

For some reason these patchset was lost in translation for a year ;)


v8: I screwed up sending v7, I sent it from a dirty directory
and clicked on send-all without checking what was under v7*. Sorry :(
This made patchwork very unhappy. I send v8 to make patchwork happy and
hopefuly also the maintainer. Sorry again

v7: Rebase on current media/master


Ricardo Ribalda Delgado (6):
media: ad5820: Define entity function
media: ad5820: DT new optional field enable-gpios
media: ad5820: Add support for enable pin
media: ad5820: Add support for of-autoload
media: ad5820: DT new compatible devices
media: ad5820: Add support for ad5821 and ad5823

.../devicetree/bindings/media/i2c/ad5820.txt | 11 +++++-
drivers/media/i2c/Kconfig | 2 +-
drivers/media/i2c/ad5820.c | 35 ++++++++++++++++---
3 files changed, 42 insertions(+), 6 deletions(-)

--
2.23.0


2019-10-07 13:32:07

by Ricardo Ribalda Delgado

[permalink] [raw]
Subject: [PATCH v8 1/6] media: ad5820: Define entity function

Without this patch, media_device_register_entity throws a warning:

dev_warn(mdev->dev,
"Entity type for entity %s was not initialized!\n",
entity->name);

Signed-off-by: Ricardo Ribalda Delgado <[email protected]>
Acked-by: Pavel Machek <[email protected]>
Reviewed-by: Laurent Pinchart <[email protected]>
---
drivers/media/i2c/ad5820.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/media/i2c/ad5820.c b/drivers/media/i2c/ad5820.c
index 925c171e7797..7a49651f4d1f 100644
--- a/drivers/media/i2c/ad5820.c
+++ b/drivers/media/i2c/ad5820.c
@@ -309,6 +309,7 @@ static int ad5820_probe(struct i2c_client *client,
v4l2_i2c_subdev_init(&coil->subdev, client, &ad5820_ops);
coil->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
coil->subdev.internal_ops = &ad5820_internal_ops;
+ coil->subdev.entity.function = MEDIA_ENT_F_LENS;
strscpy(coil->subdev.name, "ad5820 focus", sizeof(coil->subdev.name));

ret = media_entity_pads_init(&coil->subdev.entity, 0, NULL);
--
2.23.0

2019-10-07 13:32:09

by Ricardo Ribalda Delgado

[permalink] [raw]
Subject: [PATCH v8 2/6] media: ad5820: DT new optional field enable-gpios

Document new enable-gpio field. It can be used to disable the part
without turning down its regulator.

Cc: [email protected]
Signed-off-by: Ricardo Ribalda Delgado <[email protected]>
Acked-by: Pavel Machek <[email protected]>
Reviewed-by: Laurent Pinchart <[email protected]>
Reviewed-by: Rob Herring <[email protected]>
---
Documentation/devicetree/bindings/media/i2c/ad5820.txt | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/Documentation/devicetree/bindings/media/i2c/ad5820.txt b/Documentation/devicetree/bindings/media/i2c/ad5820.txt
index 5940ca11c021..db596e8eb0ba 100644
--- a/Documentation/devicetree/bindings/media/i2c/ad5820.txt
+++ b/Documentation/devicetree/bindings/media/i2c/ad5820.txt
@@ -8,6 +8,11 @@ Required Properties:

- VANA-supply: supply of voltage for VANA pin

+Optional properties:
+
+ - enable-gpios : GPIO spec for the XSHUTDOWN pin. The XSHUTDOWN signal is
+active low, a high level on the pin enables the device.
+
Example:

ad5820: coil@c {
@@ -15,5 +20,6 @@ Example:
reg = <0x0c>;

VANA-supply = <&vaux4>;
+ enable-gpios = <&msmgpio 26 GPIO_ACTIVE_HIGH>;
};

--
2.23.0

2019-10-07 13:32:31

by Ricardo Ribalda Delgado

[permalink] [raw]
Subject: [PATCH v8 3/6] media: ad5820: Add support for enable pin

This patch adds support for a programmable enable pin. It can be used in
situations where the ANA-vcc is not configurable (dummy-regulator), or
just to have a more fine control of the power saving.

The use of the enable pin is optional.

Signed-off-by: Ricardo Ribalda Delgado <[email protected]>
Acked-by: Pavel Machek <[email protected]>
---
drivers/media/i2c/Kconfig | 2 +-
drivers/media/i2c/ad5820.c | 17 +++++++++++++++++
2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig
index 78dc64d7b0e7..30d460844dff 100644
--- a/drivers/media/i2c/Kconfig
+++ b/drivers/media/i2c/Kconfig
@@ -975,7 +975,7 @@ if MEDIA_CAMERA_SUPPORT

config VIDEO_AD5820
tristate "AD5820 lens voice coil support"
- depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER
+ depends on GPIOLIB && I2C && VIDEO_V4L2 && MEDIA_CONTROLLER
help
This is a driver for the AD5820 camera lens voice coil.
It is used for example in Nokia N900 (RX-51).
diff --git a/drivers/media/i2c/ad5820.c b/drivers/media/i2c/ad5820.c
index 7a49651f4d1f..76aab651f217 100644
--- a/drivers/media/i2c/ad5820.c
+++ b/drivers/media/i2c/ad5820.c
@@ -19,6 +19,7 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/regulator/consumer.h>
+#include <linux/gpio/consumer.h>

#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
@@ -47,6 +48,8 @@ struct ad5820_device {
u32 focus_ramp_time;
u32 focus_ramp_mode;

+ struct gpio_desc *enable_gpio;
+
struct mutex power_lock;
int power_count;

@@ -114,6 +117,8 @@ static int ad5820_power_off(struct ad5820_device *coil, bool standby)
ret = ad5820_update_hw(coil);
}

+ gpiod_set_value_cansleep(coil->enable_gpio, 0);
+
ret2 = regulator_disable(coil->vana);
if (ret)
return ret;
@@ -128,6 +133,8 @@ static int ad5820_power_on(struct ad5820_device *coil, bool restore)
if (ret < 0)
return ret;

+ gpiod_set_value_cansleep(coil->enable_gpio, 1);
+
if (restore) {
/* Restore the hardware settings. */
coil->standby = false;
@@ -138,6 +145,7 @@ static int ad5820_power_on(struct ad5820_device *coil, bool restore)
return 0;

fail:
+ gpiod_set_value_cansleep(coil->enable_gpio, 0);
coil->standby = true;
regulator_disable(coil->vana);

@@ -304,6 +312,15 @@ static int ad5820_probe(struct i2c_client *client,
return ret;
}

+ coil->enable_gpio = devm_gpiod_get_optional(&client->dev, "enable",
+ GPIOD_OUT_LOW);
+ if (IS_ERR(coil->enable_gpio)) {
+ ret = PTR_ERR(coil->enable_gpio);
+ if (ret != -EPROBE_DEFER)
+ dev_err(&client->dev, "could not get enable gpio\n");
+ return ret;
+ }
+
mutex_init(&coil->power_lock);

v4l2_i2c_subdev_init(&coil->subdev, client, &ad5820_ops);
--
2.23.0

2019-10-13 12:11:30

by Pavel Machek

[permalink] [raw]
Subject: Re: [PATCH v8 0/6] ad5820: Multiple fixes

On Mon 2019-10-07 15:28:50, Ricardo Ribalda Delgado wrote:
> -Support for enable-pin, of-autoload, enable-gpios and ad5821 and ad5823
>
> For some reason these patchset was lost in translation for a year ;)
>
>
> v8: I screwed up sending v7, I sent it from a dirty directory
> and clicked on send-all without checking what was under v7*. Sorry :(
> This made patchwork very unhappy. I send v8 to make patchwork happy and
> hopefuly also the maintainer. Sorry again

Ok, this is a LED, but I assume it needs to go in using media
tree. Good luck! :-).

Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html


Attachments:
(No filename) (723.00 B)
signature.asc (188.00 B)
Digital signature
Download all attachments