mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v2 0/2] Add Reset GPIO to imx258
@ 2026-08-29 13:06 Muzaffer Kadir via B4 Relay
  2026-08-29 13:06 ` [PATCH v2 1/2] media: i2c: imx258: Add wait after enabling Muzaffer Kadir via B4 Relay
  2026-08-29 13:06 ` [PATCH v2 2/2] media: i2c: imx258: Add reset-gpio support Muzaffer Kadir via B4 Relay
  0 siblings, 2 replies; 5+ messages in thread
From: Muzaffer Kadir via B4 Relay @ 2026-08-29 13:06 UTC (permalink / raw)
  To: Sakari Ailus, Mauro Carvalho Chehab
  Cc: git, pavel, tomm.merciai, linux-media, linux-kernel, phone-devel,
	Muzaffer Kadir, Ondřej Jirman

I have a device that is not upstreamed yet (General Mobile Shamrock)
whose camera needs reset gpio to probe, it is documented in
dt-bindings but not implemented for some reason.
With adding it rear camera on the device probes correctly.

Signed-off-by: Muzaffer Kadir <muzafferkadir@mainlining.org>
---
Changes in v2:
- Moved error handling in power on to gotos as Sakari Ailus requested
- Use fsleep instead of usleep_range as Sakari Ailus requested
- Separated delay after enable and reset gpio patches as Sakari
  Ailus requested
- Link to v1: https://lore.kernel.org/r/20260828-imx258-add-reset-gpio-patch-v1-1-633972d2a700@mainlining.org

---
Muzaffer Kadir (2):
      media: i2c: imx258: Add wait after enabling
      media: i2c: imx258: Add reset-gpio support

 drivers/media/i2c/imx258.c | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)
---
base-commit: db2ddb87143519e20a95aa36c60b36107b736a58
change-id: 20260825-imx258-add-reset-gpio-patch-c438dd35f9cc

Best regards,
-- 
Muzaffer Kadir <muzafferkadir@mainlining.org>



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2 1/2] media: i2c: imx258: Add wait after enabling
  2026-08-29 13:06 [PATCH v2 0/2] Add Reset GPIO to imx258 Muzaffer Kadir via B4 Relay
@ 2026-08-29 13:06 ` Muzaffer Kadir via B4 Relay
  2026-08-30  7:36   ` Rudraksha Gupta
  2026-08-29 13:06 ` [PATCH v2 2/2] media: i2c: imx258: Add reset-gpio support Muzaffer Kadir via B4 Relay
  1 sibling, 1 reply; 5+ messages in thread
From: Muzaffer Kadir via B4 Relay @ 2026-08-29 13:06 UTC (permalink / raw)
  To: Sakari Ailus, Mauro Carvalho Chehab
  Cc: git, pavel, tomm.merciai, linux-media, linux-kernel, phone-devel,
	Muzaffer Kadir, Ondřej Jirman

From: Muzaffer Kadir <muzafferkadir@mainlining.org>

After enabling the device, a delay is required before the sensor is
ready for CCI access. 0.4ms delay needed between enabling and
reading the ID register over CCI.

Link: https://lore.kernel.org/phone-devel/apF5oxsCf7MJt1lk@kekkonen.localdomain/T/#md6a0411e81a2e3a563c935348f2fb4f3d52df64f
Signed-off-by: Muzaffer Kadir <muzafferkadir@mainlining.org>
---
 drivers/media/i2c/imx258.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/media/i2c/imx258.c b/drivers/media/i2c/imx258.c
index bc9ee449a87c..9c3a6579df0d 100644
--- a/drivers/media/i2c/imx258.c
+++ b/drivers/media/i2c/imx258.c
@@ -1129,6 +1129,7 @@ static int imx258_power_on(struct device *dev)
 		dev_err(dev, "failed to enable clock\n");
 		regulator_bulk_disable(IMX258_NUM_SUPPLIES, imx258->supplies);
 	}
+	fsleep(400);
 
 	return ret;
 }

-- 
2.54.0



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2 2/2] media: i2c: imx258: Add reset-gpio support
  2026-08-29 13:06 [PATCH v2 0/2] Add Reset GPIO to imx258 Muzaffer Kadir via B4 Relay
  2026-08-29 13:06 ` [PATCH v2 1/2] media: i2c: imx258: Add wait after enabling Muzaffer Kadir via B4 Relay
@ 2026-08-29 13:06 ` Muzaffer Kadir via B4 Relay
  2026-08-30  7:37   ` Rudraksha Gupta
  1 sibling, 1 reply; 5+ messages in thread
From: Muzaffer Kadir via B4 Relay @ 2026-08-29 13:06 UTC (permalink / raw)
  To: Sakari Ailus, Mauro Carvalho Chehab
  Cc: git, pavel, tomm.merciai, linux-media, linux-kernel, phone-devel,
	Muzaffer Kadir, Ondřej Jirman

From: Muzaffer Kadir <muzafferkadir@mainlining.org>

reset-gpio is already documented in dt-bindings but never implemented
in the driver.

Signed-off-by: Muzaffer Kadir <muzafferkadir@mainlining.org>
---
 drivers/media/i2c/imx258.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/drivers/media/i2c/imx258.c b/drivers/media/i2c/imx258.c
index 9c3a6579df0d..4a0663e816b5 100644
--- a/drivers/media/i2c/imx258.c
+++ b/drivers/media/i2c/imx258.c
@@ -9,6 +9,7 @@
 #include <linux/pm_runtime.h>
 #include <linux/regulator/consumer.h>
 #include <linux/unaligned.h>
+#include <linux/gpio/consumer.h>
 
 #include <media/v4l2-cci.h>
 #include <media/v4l2-ctrls.h>
@@ -681,6 +682,7 @@ struct imx258 {
 
 	struct clk *clk;
 	struct regulator_bulk_data supplies[IMX258_NUM_SUPPLIES];
+	struct gpio_desc *reset_gpio;
 };
 
 static inline struct imx258 *to_imx258(struct v4l2_subdev *_sd)
@@ -1127,10 +1129,23 @@ static int imx258_power_on(struct device *dev)
 	ret = clk_prepare_enable(imx258->clk);
 	if (ret) {
 		dev_err(dev, "failed to enable clock\n");
-		regulator_bulk_disable(IMX258_NUM_SUPPLIES, imx258->supplies);
+		goto err_disable_regulators;
+	}
+
+	ret = gpiod_set_value_cansleep(imx258->reset_gpio, 0);
+	if (ret) {
+		dev_err(dev, "failed to deassert reset\n");
+		goto err_disable_clk;
 	}
 	fsleep(400);
 
+	return ret;
+
+err_disable_clk:
+	clk_disable_unprepare(imx258->clk);
+err_disable_regulators:
+	regulator_bulk_disable(IMX258_NUM_SUPPLIES, imx258->supplies);
+
 	return ret;
 }
 
@@ -1139,6 +1154,7 @@ static int imx258_power_off(struct device *dev)
 	struct v4l2_subdev *sd = dev_get_drvdata(dev);
 	struct imx258 *imx258 = to_imx258(sd);
 
+	gpiod_set_value_cansleep(imx258->reset_gpio, 1);
 	clk_disable_unprepare(imx258->clk);
 	regulator_bulk_disable(IMX258_NUM_SUPPLIES, imx258->supplies);
 
@@ -1383,6 +1399,12 @@ static int imx258_probe(struct i2c_client *client)
 		return ret;
 	}
 
+	imx258->reset_gpio = devm_gpiod_get_optional(imx258->dev, "reset",
+		GPIOD_OUT_HIGH);
+	if (IS_ERR(imx258->reset_gpio))
+		return dev_err_probe(imx258->dev, PTR_ERR(imx258->reset_gpio),
+				     "Failed to get reset-gpios\n");
+
 	ret = imx258_get_regulators(imx258);
 	if (ret)
 		return dev_err_probe(imx258->dev, ret,

-- 
2.54.0



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 1/2] media: i2c: imx258: Add wait after enabling
  2026-08-29 13:06 ` [PATCH v2 1/2] media: i2c: imx258: Add wait after enabling Muzaffer Kadir via B4 Relay
@ 2026-08-30  7:36   ` Rudraksha Gupta
  0 siblings, 0 replies; 5+ messages in thread
From: Rudraksha Gupta @ 2026-08-30  7:36 UTC (permalink / raw)
  To: devnull+muzafferkadir.mainlining.org
  Cc: git, linux-kernel, linux-media, mchehab, megi, muzafferkadir,
	pavel, phone-devel, sakari.ailus, tomm.merciai

Great series! Enables the back camera on my Pinephone Pro.

Tested-by: Rudraksha Gupta <guptarud@gmail.com>


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 2/2] media: i2c: imx258: Add reset-gpio support
  2026-08-29 13:06 ` [PATCH v2 2/2] media: i2c: imx258: Add reset-gpio support Muzaffer Kadir via B4 Relay
@ 2026-08-30  7:37   ` Rudraksha Gupta
  0 siblings, 0 replies; 5+ messages in thread
From: Rudraksha Gupta @ 2026-08-30  7:37 UTC (permalink / raw)
  To: devnull+muzafferkadir.mainlining.org
  Cc: git, linux-kernel, linux-media, mchehab, megi, muzafferkadir,
	pavel, phone-devel, sakari.ailus, tomm.merciai

Tested-by: Rudraksha Gupta <guptarud@gmail.com>


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-08-30  7:37 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-29 13:06 [PATCH v2 0/2] Add Reset GPIO to imx258 Muzaffer Kadir via B4 Relay
2026-08-29 13:06 ` [PATCH v2 1/2] media: i2c: imx258: Add wait after enabling Muzaffer Kadir via B4 Relay
2026-08-30  7:36   ` Rudraksha Gupta
2026-08-29 13:06 ` [PATCH v2 2/2] media: i2c: imx258: Add reset-gpio support Muzaffer Kadir via B4 Relay
2026-08-30  7:37   ` Rudraksha Gupta

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®