Message ID | 20240327231710.53188-23-git@luigi311.com |
---|---|
State | New |
Headers | show |
Series | v2: imx258 improvement series | expand |
On Wed, Mar 27, 2024 at 05:17:08PM -0600, git@luigi311.com wrote: > From: Luigi311 <git@luigi311.com> > > On some boards powerdown signal needs to be deasserted for this > sensor to be enabled. > > Signed-off-by: Ondrej Jirman <megi@xff.cz> > --- > .../devicetree/bindings/media/i2c/sony,imx258.yaml | 4 ++++ Bindings should be a separate patch. > drivers/media/i2c/imx258.c | 13 +++++++++++++ > 2 files changed, 17 insertions(+) > > diff --git a/Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml b/Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml > index c7856de15ba3..0414085bf22f 100644 > --- a/Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml > +++ b/Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml > @@ -35,6 +35,10 @@ properties: > reg: > maxItems: 1 > > + powerdown-gpios: > + description: |- Don't need '|-' if no formatting. > + Reference to the GPIO connected to the PWDN pin, if any. > + > reset-gpios: > description: |- > Reference to the GPIO connected to the XCLR pin, if any.
On 3/28/24 14:48, Rob Herring wrote: > On Wed, Mar 27, 2024 at 05:17:08PM -0600, git@luigi311.com wrote: >> From: Luigi311 <git@luigi311.com> >> >> On some boards powerdown signal needs to be deasserted for this >> sensor to be enabled. >> >> Signed-off-by: Ondrej Jirman <megi@xff.cz> >> --- >> .../devicetree/bindings/media/i2c/sony,imx258.yaml | 4 ++++ > > Bindings should be a separate patch. > Ok ill create separate patch for adding in the binding and then a follow up patch with the other half that actually adds it to the driver >> drivers/media/i2c/imx258.c | 13 +++++++++++++ >> 2 files changed, 17 insertions(+) >> >> diff --git a/Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml b/Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml >> index c7856de15ba3..0414085bf22f 100644 >> --- a/Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml >> +++ b/Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml >> @@ -35,6 +35,10 @@ properties: >> reg: >> maxItems: 1 >> >> + powerdown-gpios: >> + description: |- > > Don't need '|-' if no formatting> Done >> + Reference to the GPIO connected to the PWDN pin, if any. >> + >> reset-gpios: >> description: |- >> Reference to the GPIO connected to the XCLR pin, if any.
diff --git a/Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml b/Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml index c7856de15ba3..0414085bf22f 100644 --- a/Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml +++ b/Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml @@ -35,6 +35,10 @@ properties: reg: maxItems: 1 + powerdown-gpios: + description: |- + Reference to the GPIO connected to the PWDN pin, if any. + reset-gpios: description: |- Reference to the GPIO connected to the XCLR pin, if any. diff --git a/drivers/media/i2c/imx258.c b/drivers/media/i2c/imx258.c index c559a06bf180..d8c51d5f04e0 100644 --- a/drivers/media/i2c/imx258.c +++ b/drivers/media/i2c/imx258.c @@ -686,6 +686,8 @@ struct imx258 { unsigned int lane_mode_idx; unsigned int csi2_flags; + struct gpio_desc *powerdown_gpio; + /* * Mutex for serialized access: * Protect sensor module set pad format and start/stop streaming safely. @@ -1220,6 +1222,8 @@ static int imx258_power_on(struct device *dev) struct imx258 *imx258 = to_imx258(sd); int ret; + gpiod_set_value_cansleep(imx258->powerdown_gpio, 0); + ret = regulator_bulk_enable(IMX258_NUM_SUPPLIES, imx258->supplies); if (ret) { @@ -1231,6 +1235,7 @@ static int imx258_power_on(struct device *dev) ret = clk_prepare_enable(imx258->clk); if (ret) { dev_err(dev, "failed to enable clock\n"); + gpiod_set_value_cansleep(imx258->powerdown_gpio, 1); regulator_bulk_disable(IMX258_NUM_SUPPLIES, imx258->supplies); } @@ -1245,6 +1250,8 @@ static int imx258_power_off(struct device *dev) clk_disable_unprepare(imx258->clk); regulator_bulk_disable(IMX258_NUM_SUPPLIES, imx258->supplies); + gpiod_set_value_cansleep(imx258->powerdown_gpio, 1); + return 0; } @@ -1548,6 +1555,12 @@ static int imx258_probe(struct i2c_client *client) if (!imx258->variant_cfg) imx258->variant_cfg = &imx258_cfg; + /* request optional power down pin */ + imx258->powerdown_gpio = devm_gpiod_get_optional(&client->dev, "powerdown", + GPIOD_OUT_HIGH); + if (IS_ERR(imx258->powerdown_gpio)) + return PTR_ERR(imx258->powerdown_gpio); + /* Initialize subdev */ v4l2_i2c_subdev_init(&imx258->sd, client, &imx258_subdev_ops);