Message ID | 20240327231710.53188-23-git@luigi311.com (mailing list archive) |
---|---|
State | Superseded |
Headers |
Received: from ny.mirrors.kernel.org ([147.75.199.223]) by linuxtv.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from <linux-media+bounces-8020-patchwork=linuxtv.org@vger.kernel.org>) id 1rpcXt-0002Pz-1c for patchwork@linuxtv.org; Wed, 27 Mar 2024 23:19:02 +0000 Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 35EE91C283A7 for <patchwork@linuxtv.org>; Wed, 27 Mar 2024 23:19:00 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id BFBAA155724; Wed, 27 Mar 2024 23:18:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=luigi311.com header.i=@luigi311.com header.b="CQZa0O3P" X-Original-To: linux-media@vger.kernel.org Received: from mail-108-mta225.mxroute.com (mail-108-mta225.mxroute.com [136.175.108.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2FA0E155398 for <linux-media@vger.kernel.org>; Wed, 27 Mar 2024 23:18:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=136.175.108.225 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711581497; cv=none; b=t/gcRXsnbU8uH4jmniOPGJkbnYv5pdQnfEurTmoYb1QQyc7m0ZUBgad1gtdDOA2bXyLRtmREp0+FL6/ECZEZnWz+OOhaDDApC+NILmCCEedPYhsIs4rPtjmAG/IFpMq7RotNzfF8u7VlcKosC7y+Pu7AB/oylnipc2DpOnUgzqo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711581497; c=relaxed/simple; bh=0vPk/AhRfa0eJWWuR2HM/VywuaD7+XD66XjsHchVAAQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=adnQaXQzxMRCxmhhABqfW7wIw8C5pjQ6VQknv3reTXtU8h5a7coWA0F0a9KD0fgORnAPlMpQMCcJDF2jZ/S+jP22Bh/DTwb1/jVp4iDtdLvfxSHCX5cwEwiLTuqCXmCaUrK2KCHmd2SBbOLK3BA9QuhdcKSs7ks6fnykIWTFX04= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=luigi311.com; spf=pass smtp.mailfrom=luigi311.com; dkim=pass (2048-bit key) header.d=luigi311.com header.i=@luigi311.com header.b=CQZa0O3P; arc=none smtp.client-ip=136.175.108.225 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=luigi311.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=luigi311.com Received: from filter006.mxroute.com ([136.175.111.2] filter006.mxroute.com) (Authenticated sender: mN4UYu2MZsgR) by mail-108-mta225.mxroute.com (ZoneMTA) with ESMTPSA id 18e8234c8880003bea.010 for <linux-media@vger.kernel.org> (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384); Wed, 27 Mar 2024 23:18:01 +0000 X-Zone-Loop: ce528b36b9e4b9d629d5df1f2890d97c880a638cf828 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=luigi311.com; s=x; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=bZsei1tpRAidGrbzZBEBrMkrAWAYUFFFPXs9zNhTnjM=; b=CQZa0O3PSCbFR1uiO7kH14OhAl MRIrBoW588+LBeFTMgqoC9m6Q6QhFF9QJXofPkO5Y608wcdb0mwdS6uG971ktGYzOVPFDlYRrMxT5 IdUr7FImKuxuMA+r9BaBdB+OKEHWTAGM2a1CpTzW/dkctGnYYIiOghw5joJ7TBgpxNhMvXDT9KF+5 +tx2NWcH66UGXEkkA8Sv+WMKabdhX1UQ6i5zz7Zu8XnkY2SXNq6/B+3VvboiVrKMTNrmjlSlcQiDT nACFUSO4pwvsJzaOX+uq8qWVO65/VB4hXQnNfhxEKxrgq/aDrjIKRVHJ34Zf6krUjS6W9wFpMESaN 3sPxq0kg==; From: git@luigi311.com To: linux-media@vger.kernel.org Cc: dave.stevenson@raspberrypi.com, jacopo.mondi@ideasonboard.com, mchehab@kernel.org, robh@kernel.org, krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org, shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, sakari.ailus@linux.intel.com, devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Luigi311 <git@luigi311.com>, Ondrej Jirman <megi@xff.cz> Subject: [PATCH 22/23] drivers: media: i2c: imx258: Add support for powerdown gpio Date: Wed, 27 Mar 2024 17:17:08 -0600 Message-ID: <20240327231710.53188-23-git@luigi311.com> In-Reply-To: <20240327231710.53188-1-git@luigi311.com> References: <20240327231710.53188-1-git@luigi311.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: <linux-media.vger.kernel.org> List-Subscribe: <mailto:linux-media+subscribe@vger.kernel.org> List-Unsubscribe: <mailto:linux-media+unsubscribe@vger.kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Authenticated-Id: personal@luigi311.com X-LSpam-Score: -2.3 (--) X-LSpam-Report: No, score=-2.3 required=5.0 tests=ARC_SIGNED=0.001,ARC_VALID=-0.1,BAYES_00=-1.9,DKIM_INVALID=0.1,DKIM_SIGNED=0.1,DMARC_MISSING=0.001,HEADER_FROM_DIFFERENT_DOMAINS=0.5,MAILING_LIST_MULTI=-1,RCVD_IN_DNSWL_NONE=-0.0001,SPF_HELO_NONE=0.001,SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no |
Series |
v2: imx258 improvement series
|
|
Commit Message
Luis Garcia
March 27, 2024, 11:17 p.m. UTC
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 ++++ drivers/media/i2c/imx258.c | 13 +++++++++++++ 2 files changed, 17 insertions(+)
Comments
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.
Hi, kernel test robot noticed the following build warnings: https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/git-luigi311-com/media-i2c-imx258-Remove-unused-defines/20240328-072629 base: git://linuxtv.org/media_tree.git master patch link: https://lore.kernel.org/r/20240327231710.53188-23-git%40luigi311.com patch subject: [PATCH 22/23] drivers: media: i2c: imx258: Add support for powerdown gpio config: x86_64-randconfig-161-20240331 (https://download.01.org/0day-ci/archive/20240401/202404011425.PVKV9Lf1-lkp@intel.com/config) compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Reported-by: Dan Carpenter <dan.carpenter@linaro.org> | Closes: https://lore.kernel.org/r/202404011425.PVKV9Lf1-lkp@intel.com/ smatch warnings: drivers/media/i2c/imx258.c:1562 imx258_probe() warn: missing unwind goto? vim +1562 drivers/media/i2c/imx258.c d3773094af21c9 Dave Stevenson 2024-03-27 1476 e4802cb00bfe3d Jason Chen 2018-05-02 1477 static int imx258_probe(struct i2c_client *client) e4802cb00bfe3d Jason Chen 2018-05-02 1478 { e4802cb00bfe3d Jason Chen 2018-05-02 1479 struct imx258 *imx258; 786d2ad50b9b49 Dave Stevenson 2024-03-27 1480 struct fwnode_handle *endpoint; 786d2ad50b9b49 Dave Stevenson 2024-03-27 1481 struct v4l2_fwnode_endpoint ep = { 786d2ad50b9b49 Dave Stevenson 2024-03-27 1482 .bus_type = V4L2_MBUS_CSI2_DPHY 786d2ad50b9b49 Dave Stevenson 2024-03-27 1483 }; e4802cb00bfe3d Jason Chen 2018-05-02 1484 int ret; e4802cb00bfe3d Jason Chen 2018-05-02 1485 u32 val = 0; e4802cb00bfe3d Jason Chen 2018-05-02 1486 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1487 imx258 = devm_kzalloc(&client->dev, sizeof(*imx258), GFP_KERNEL); 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1488 if (!imx258) 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1489 return -ENOMEM; 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1490 d3773094af21c9 Dave Stevenson 2024-03-27 1491 ret = imx258_get_regulators(imx258, client); d3773094af21c9 Dave Stevenson 2024-03-27 1492 if (ret) d3773094af21c9 Dave Stevenson 2024-03-27 1493 return dev_err_probe(&client->dev, ret, d3773094af21c9 Dave Stevenson 2024-03-27 1494 "failed to get regulators\n"); d3773094af21c9 Dave Stevenson 2024-03-27 1495 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1496 imx258->clk = devm_clk_get_optional(&client->dev, NULL); d170b0ea176098 Sakari Ailus 2021-08-16 1497 if (IS_ERR(imx258->clk)) d170b0ea176098 Sakari Ailus 2021-08-16 1498 return dev_err_probe(&client->dev, PTR_ERR(imx258->clk), d170b0ea176098 Sakari Ailus 2021-08-16 1499 "error getting clock\n"); 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1500 if (!imx258->clk) { 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1501 dev_dbg(&client->dev, 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1502 "no clock provided, using clock-frequency property\n"); 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1503 e4802cb00bfe3d Jason Chen 2018-05-02 1504 device_property_read_u32(&client->dev, "clock-frequency", &val); d170b0ea176098 Sakari Ailus 2021-08-16 1505 } else { d170b0ea176098 Sakari Ailus 2021-08-16 1506 val = clk_get_rate(imx258->clk); 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1507 } 8bde18cb296d0e Dave Stevenson 2024-03-27 1508 8bde18cb296d0e Dave Stevenson 2024-03-27 1509 switch (val) { 8bde18cb296d0e Dave Stevenson 2024-03-27 1510 case 19200000: 8bde18cb296d0e Dave Stevenson 2024-03-27 1511 imx258->link_freq_configs = link_freq_configs_19_2; 8bde18cb296d0e Dave Stevenson 2024-03-27 1512 imx258->link_freq_menu_items = link_freq_menu_items_19_2; 8bde18cb296d0e Dave Stevenson 2024-03-27 1513 break; 8bde18cb296d0e Dave Stevenson 2024-03-27 1514 case 24000000: 8bde18cb296d0e Dave Stevenson 2024-03-27 1515 imx258->link_freq_configs = link_freq_configs_24; 8bde18cb296d0e Dave Stevenson 2024-03-27 1516 imx258->link_freq_menu_items = link_freq_menu_items_24; 8bde18cb296d0e Dave Stevenson 2024-03-27 1517 break; 8bde18cb296d0e Dave Stevenson 2024-03-27 1518 default: 8bde18cb296d0e Dave Stevenson 2024-03-27 1519 dev_err(&client->dev, "input clock frequency of %u not supported\n", 8bde18cb296d0e Dave Stevenson 2024-03-27 1520 val); e4802cb00bfe3d Jason Chen 2018-05-02 1521 return -EINVAL; 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1522 } e4802cb00bfe3d Jason Chen 2018-05-02 1523 786d2ad50b9b49 Dave Stevenson 2024-03-27 1524 endpoint = fwnode_graph_get_next_endpoint(dev_fwnode(&client->dev), NULL); 786d2ad50b9b49 Dave Stevenson 2024-03-27 1525 if (!endpoint) { 786d2ad50b9b49 Dave Stevenson 2024-03-27 1526 dev_err(&client->dev, "Endpoint node not found\n"); 786d2ad50b9b49 Dave Stevenson 2024-03-27 1527 return -EINVAL; 786d2ad50b9b49 Dave Stevenson 2024-03-27 1528 } 786d2ad50b9b49 Dave Stevenson 2024-03-27 1529 786d2ad50b9b49 Dave Stevenson 2024-03-27 1530 ret = v4l2_fwnode_endpoint_alloc_parse(endpoint, &ep); 786d2ad50b9b49 Dave Stevenson 2024-03-27 1531 fwnode_handle_put(endpoint); 786d2ad50b9b49 Dave Stevenson 2024-03-27 1532 if (ret) { 786d2ad50b9b49 Dave Stevenson 2024-03-27 1533 dev_err(&client->dev, "Parsing endpoint node failed\n"); 786d2ad50b9b49 Dave Stevenson 2024-03-27 1534 return ret; 786d2ad50b9b49 Dave Stevenson 2024-03-27 1535 } 786d2ad50b9b49 Dave Stevenson 2024-03-27 1536 786d2ad50b9b49 Dave Stevenson 2024-03-27 1537 /* Get number of data lanes */ a42d61a239fac8 Dave Stevenson 2024-03-27 1538 switch (ep.bus.mipi_csi2.num_data_lanes) { a42d61a239fac8 Dave Stevenson 2024-03-27 1539 case 2: a42d61a239fac8 Dave Stevenson 2024-03-27 1540 imx258->lane_mode_idx = IMX258_2_LANE_MODE; a42d61a239fac8 Dave Stevenson 2024-03-27 1541 break; a42d61a239fac8 Dave Stevenson 2024-03-27 1542 case 4: a42d61a239fac8 Dave Stevenson 2024-03-27 1543 imx258->lane_mode_idx = IMX258_4_LANE_MODE; a42d61a239fac8 Dave Stevenson 2024-03-27 1544 break; a42d61a239fac8 Dave Stevenson 2024-03-27 1545 default: 786d2ad50b9b49 Dave Stevenson 2024-03-27 1546 dev_err(&client->dev, "Invalid data lanes: %u\n", a42d61a239fac8 Dave Stevenson 2024-03-27 1547 ep.bus.mipi_csi2.num_data_lanes); 786d2ad50b9b49 Dave Stevenson 2024-03-27 1548 ret = -EINVAL; 786d2ad50b9b49 Dave Stevenson 2024-03-27 1549 goto error_endpoint_free; 786d2ad50b9b49 Dave Stevenson 2024-03-27 1550 } 786d2ad50b9b49 Dave Stevenson 2024-03-27 1551 7db096053387db Dave Stevenson 2024-03-27 1552 imx258->csi2_flags = ep.bus.mipi_csi2.flags; 7db096053387db Dave Stevenson 2024-03-27 1553 a8bb93eeccfa73 Dave Stevenson 2024-03-27 1554 imx258->variant_cfg = of_device_get_match_data(&client->dev); a8bb93eeccfa73 Dave Stevenson 2024-03-27 1555 if (!imx258->variant_cfg) a8bb93eeccfa73 Dave Stevenson 2024-03-27 1556 imx258->variant_cfg = &imx258_cfg; a8bb93eeccfa73 Dave Stevenson 2024-03-27 1557 8a1906e91c0093 Luigi311 2024-03-27 1558 /* request optional power down pin */ 8a1906e91c0093 Luigi311 2024-03-27 1559 imx258->powerdown_gpio = devm_gpiod_get_optional(&client->dev, "powerdown", 8a1906e91c0093 Luigi311 2024-03-27 1560 GPIOD_OUT_HIGH); 8a1906e91c0093 Luigi311 2024-03-27 1561 if (IS_ERR(imx258->powerdown_gpio)) 8a1906e91c0093 Luigi311 2024-03-27 @1562 return PTR_ERR(imx258->powerdown_gpio); ret = PTR_ERR(imx258->powerdown_gpio); goto error_endpoint_free; 8a1906e91c0093 Luigi311 2024-03-27 1563 e4802cb00bfe3d Jason Chen 2018-05-02 1564 /* Initialize subdev */ e4802cb00bfe3d Jason Chen 2018-05-02 1565 v4l2_i2c_subdev_init(&imx258->sd, client, &imx258_subdev_ops); e4802cb00bfe3d Jason Chen 2018-05-02 1566 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1567 /* Will be powered off via pm_runtime_idle */ 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1568 ret = imx258_power_on(&client->dev); 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1569 if (ret) 786d2ad50b9b49 Dave Stevenson 2024-03-27 1570 goto error_endpoint_free; 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1571 e4802cb00bfe3d Jason Chen 2018-05-02 1572 /* Check module identity */ e4802cb00bfe3d Jason Chen 2018-05-02 1573 ret = imx258_identify_module(imx258); e4802cb00bfe3d Jason Chen 2018-05-02 1574 if (ret) 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1575 goto error_identify; e4802cb00bfe3d Jason Chen 2018-05-02 1576 e4802cb00bfe3d Jason Chen 2018-05-02 1577 /* Set default mode to max resolution */ e4802cb00bfe3d Jason Chen 2018-05-02 1578 imx258->cur_mode = &supported_modes[0]; e4802cb00bfe3d Jason Chen 2018-05-02 1579 e4802cb00bfe3d Jason Chen 2018-05-02 1580 ret = imx258_init_controls(imx258); e4802cb00bfe3d Jason Chen 2018-05-02 1581 if (ret) 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1582 goto error_identify; e4802cb00bfe3d Jason Chen 2018-05-02 1583 e4802cb00bfe3d Jason Chen 2018-05-02 1584 /* Initialize subdev */ e4802cb00bfe3d Jason Chen 2018-05-02 1585 imx258->sd.internal_ops = &imx258_internal_ops; e4802cb00bfe3d Jason Chen 2018-05-02 1586 imx258->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; e4802cb00bfe3d Jason Chen 2018-05-02 1587 imx258->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR; e4802cb00bfe3d Jason Chen 2018-05-02 1588 e4802cb00bfe3d Jason Chen 2018-05-02 1589 /* Initialize source pad */ e4802cb00bfe3d Jason Chen 2018-05-02 1590 imx258->pad.flags = MEDIA_PAD_FL_SOURCE; e4802cb00bfe3d Jason Chen 2018-05-02 1591 e4802cb00bfe3d Jason Chen 2018-05-02 1592 ret = media_entity_pads_init(&imx258->sd.entity, 1, &imx258->pad); e4802cb00bfe3d Jason Chen 2018-05-02 1593 if (ret) e4802cb00bfe3d Jason Chen 2018-05-02 1594 goto error_handler_free; e4802cb00bfe3d Jason Chen 2018-05-02 1595 15786f7b564eff Sakari Ailus 2021-03-05 1596 ret = v4l2_async_register_subdev_sensor(&imx258->sd); e4802cb00bfe3d Jason Chen 2018-05-02 1597 if (ret < 0) e4802cb00bfe3d Jason Chen 2018-05-02 1598 goto error_media_entity; e4802cb00bfe3d Jason Chen 2018-05-02 1599 e4802cb00bfe3d Jason Chen 2018-05-02 1600 pm_runtime_set_active(&client->dev); e4802cb00bfe3d Jason Chen 2018-05-02 1601 pm_runtime_enable(&client->dev); e4802cb00bfe3d Jason Chen 2018-05-02 1602 pm_runtime_idle(&client->dev); 786d2ad50b9b49 Dave Stevenson 2024-03-27 1603 v4l2_fwnode_endpoint_free(&ep); e4802cb00bfe3d Jason Chen 2018-05-02 1604 e4802cb00bfe3d Jason Chen 2018-05-02 1605 return 0; e4802cb00bfe3d Jason Chen 2018-05-02 1606 e4802cb00bfe3d Jason Chen 2018-05-02 1607 error_media_entity: e4802cb00bfe3d Jason Chen 2018-05-02 1608 media_entity_cleanup(&imx258->sd.entity); e4802cb00bfe3d Jason Chen 2018-05-02 1609 e4802cb00bfe3d Jason Chen 2018-05-02 1610 error_handler_free: e4802cb00bfe3d Jason Chen 2018-05-02 1611 imx258_free_controls(imx258); e4802cb00bfe3d Jason Chen 2018-05-02 1612 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1613 error_identify: 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1614 imx258_power_off(&client->dev); 9fda25332c4b9e Krzysztof Kozlowski 2021-01-27 1615 786d2ad50b9b49 Dave Stevenson 2024-03-27 1616 error_endpoint_free: 786d2ad50b9b49 Dave Stevenson 2024-03-27 1617 v4l2_fwnode_endpoint_free(&ep); 786d2ad50b9b49 Dave Stevenson 2024-03-27 1618 e4802cb00bfe3d Jason Chen 2018-05-02 1619 return ret; e4802cb00bfe3d Jason Chen 2018-05-02 1620 }
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);