From: Hans de Goede <hdegoede@redhat.com>
To: Dan Scally <dan.scally@ideasonboard.com>,
Mark Gross <markgross@kernel.org>,
Andy Shevchenko <andy@kernel.org>,
Daniel Scally <djrscally@gmail.com>
Cc: platform-driver-x86@vger.kernel.org,
Sakari Ailus <sakari.ailus@linux.intel.com>,
Kate Hsuan <hpa@redhat.com>,
linux-media@vger.kernel.org
Subject: Re: [PATCH 3/3] platform/x86: int3472/discrete: Add support for sensor-drivers which expect clken + pled GPIOs
Date: Fri, 25 Nov 2022 19:38:26 +0100 [thread overview]
Message-ID: <e7fb85f9-9e39-e33e-61b7-14e02cfafb88@redhat.com> (raw)
In-Reply-To: <0fa6d92a-9b3b-cec9-c834-1b530ffe7a68@ideasonboard.com>
Hi,
On 11/25/22 17:07, Dan Scally wrote:
> Hi Hans
>
> On 24/11/2022 20:00, Hans de Goede wrote:
>> The hm11b1 and ov01a1s sensor drivers shipped with the out of tree IPU6
>> driver, expect the clk_en GPIO to be modelled as a "clken" GPIO rather
>> then using the clk framework; and the hm11b1, ov01a1s and ov2740 driver
>> all 3 expect the privacy-led to be modelled as a "pled" GPIO, rather then
>> it being turned on/off at the same time as the clk.
>>
>> Adjust how we handle the GPIOs on these sensors accordingly, for now at
>> least, so that the out of tree driver can work with standard distro kernels
>> through e.g. dkms. Otherwise users need to run a patched kernel just for
>> this small difference.
>>
>> This of course needs to be revisited when we mainline these sensor drivers,
>> I can imagine the drivers getting clk-framework support when they are
>> mainlined and then at that same time their acpi HID can be dropped from
>> the use_gpio_for_clk_acpi_ids[] array.
>>
>> Note there already is a mainline driver for the ov2740, but that is not
>> impacted by this change since atm it uses neither the clk framework nor
>> a "clken" GPIO.
>>
>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>> ---
>> Maybe we should patch the sensor drivers for sensors supported with
>> the IPU3 to also expect the privacy-led to always be a separate GPIO?
>>
>> This way we can also avoid the camera LED briefly going on at boot,
>> when the driver is powering things up to read the sensor's ID register.
>>
>> And I have also put looking at making the mainline ov2740 driver suitable
>> for use with the (out of tree) IPU6 driver on my TODO list.
>> ---
>> drivers/platform/x86/intel/int3472/common.h | 2 +-
>> drivers/platform/x86/intel/int3472/discrete.c | 37 +++++++++++++++----
>> 2 files changed, 31 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/platform/x86/intel/int3472/common.h b/drivers/platform/x86/intel/int3472/common.h
>> index 53270d19c73a..58647d3084b9 100644
>> --- a/drivers/platform/x86/intel/int3472/common.h
>> +++ b/drivers/platform/x86/intel/int3472/common.h
>> @@ -23,7 +23,7 @@
>> #define INT3472_GPIO_TYPE_PRIVACY_LED 0x0d
>> #define INT3472_PDEV_MAX_NAME_LEN 23
>> -#define INT3472_MAX_SENSOR_GPIOS 3
>> +#define INT3472_MAX_SENSOR_GPIOS 4
>> #define GPIO_REGULATOR_NAME_LENGTH 21
>> #define GPIO_REGULATOR_SUPPLY_NAME_LENGTH 9
>> diff --git a/drivers/platform/x86/intel/int3472/discrete.c b/drivers/platform/x86/intel/int3472/discrete.c
>> index 9159291be28a..bfcf8184db16 100644
>> --- a/drivers/platform/x86/intel/int3472/discrete.c
>> +++ b/drivers/platform/x86/intel/int3472/discrete.c
>> @@ -216,6 +216,26 @@ static const char *int3472_dsm_type_to_func(u8 type)
>> return "unknown";
>> }
>> +/*
>> + * The hm11b1 and ov01a1s sensor drivers shipped with the out of tree IPU6 driver,
>> + * expect the clk_en GPIO to be modelled as a "clken" GPIO rather then as a clk and
>> + * the hm11b1, ov01a1s and ov2740 driver all 3 expect the privacy-led to be modelled
>> + * as a "pled" GPIO, rather then it being turned on/off at the same time as the clk.
>> + *
>> + * Note there also is a mainline driver for the ov2740, but that does not use
>> + * the clk framework atm either.
>> + *
>> + * Adjust how we handle the GPIOs on these sensors accordingly, for now at least.
>> + * This needs to be revisited when we mainline these sensor drivers / when we merge
>> + * the necessary changes in the ov2740 sensor driver so that it can work on the IPU6.
>> + */
>
>
> I'm not really sure about this one though; wouldn't it be better to alter those sensor drivers to use the clock framework properly?
Yes, Laurent more or less said the same thing; and I was already starting
to think in this direction myself when typing the cover letter.
So yes I agree with you and Laurent. That still leaves the question of what to do
with devices with just a privacy LED without a clk-en though.
Dan, do you have a list of sensors which currently are known to work / be used
together with the IPU3 (and the int3472 discrete code) ?
I know I will need to modifi the ov5693 code, but I wonder what other drivers
I will need to modify ?
I think I might just move those sensor-drivers over to using a GPIO
for the privacy LED and just always register a GPIO for the privacy LED
pin, does that sound like a good idea to you ?
Anyways it is weekend now and I've already worked too many hours this week,
so I'll take a look at this on Monday.
Regards,
Hans
>> +static const struct acpi_device_id use_gpio_for_clk_acpi_ids[] = {
>> + { "HIMX11B1" }, /* hm11b1 */
>> + { "OVTI01AS" }, /* ov01a1s */
>> + { "INT3474" }, /* ov2740 */
>> + {}
>> +};
>> +
>> /**
>> * skl_int3472_handle_gpio_resources: Map PMIC resources to consuming sensor
>> * @ares: A pointer to a &struct acpi_resource
>> @@ -293,19 +313,22 @@ static int skl_int3472_handle_gpio_resources(struct acpi_resource *ares,
>> (polarity == GPIO_ACTIVE_HIGH) ? "high" : "low");
>> switch (type) {
>> + case INT3472_GPIO_TYPE_CLK_ENABLE:
>> + case INT3472_GPIO_TYPE_PRIVACY_LED:
>> + if (!acpi_match_device_ids(int3472->adev, use_gpio_for_clk_acpi_ids)) {
>> + ret = skl_int3472_map_gpio_to_clk(int3472, agpio, type);
>> + if (ret)
>> + err_msg = "Failed to map GPIO to clock\n";
>> +
>> + break;
>> + }
>> + fallthrough;
>> case INT3472_GPIO_TYPE_RESET:
>> case INT3472_GPIO_TYPE_POWERDOWN:
>> ret = skl_int3472_map_gpio_to_sensor(int3472, agpio, func, polarity);
>> if (ret)
>> err_msg = "Failed to map GPIO pin to sensor\n";
>> - break;
>> - case INT3472_GPIO_TYPE_CLK_ENABLE:
>> - case INT3472_GPIO_TYPE_PRIVACY_LED:
>> - ret = skl_int3472_map_gpio_to_clk(int3472, agpio, type);
>> - if (ret)
>> - err_msg = "Failed to map GPIO to clock\n";
>> -
>> break;
>> case INT3472_GPIO_TYPE_POWER_ENABLE:
>> ret = skl_int3472_register_regulator(int3472, agpio);
>
next prev parent reply other threads:[~2022-11-25 18:39 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-24 20:00 [PATCH 0/3] platform/x86: int3472/discrete: Make it work with IPU6 Hans de Goede
2022-11-24 20:00 ` [PATCH 1/3] platform/x86: int3472/discrete: Refactor GPIO to sensor mapping Hans de Goede
2022-11-24 20:09 ` Andy Shevchenko
2022-11-24 20:20 ` Hans de Goede
2022-11-24 22:19 ` Andy Shevchenko
2022-11-25 16:00 ` Dan Scally
2022-11-28 10:56 ` Hans de Goede
2022-11-24 20:00 ` [PATCH 2/3] platform/x86: int3472/discrete: Get the polarity from the _DSM entry Hans de Goede
2022-11-24 20:13 ` Andy Shevchenko
2022-11-24 20:26 ` Hans de Goede
2022-11-25 10:42 ` Dan Scally
2022-11-25 16:01 ` Dan Scally
2022-11-29 21:56 ` Hans de Goede
2022-11-24 20:00 ` [PATCH 3/3] platform/x86: int3472/discrete: Add support for sensor-drivers which expect clken + pled GPIOs Hans de Goede
2022-11-25 14:36 ` Laurent Pinchart
2022-11-25 16:07 ` Dan Scally
2022-11-25 18:38 ` Hans de Goede [this message]
2022-11-28 7:39 ` Dan Scally
2022-11-28 10:04 ` Hans de Goede
2022-11-25 10:17 ` [PATCH 0/3] platform/x86: int3472/discrete: Make it work with IPU6 Dan Scally
2022-11-25 10:58 ` Laurent Pinchart
2022-11-25 11:03 ` Dan Scally
2022-11-25 11:06 ` Andy Shevchenko
2022-11-25 11:11 ` Dan Scally
2022-11-25 11:23 ` Hans de Goede
2022-11-25 11:42 ` Dan Scally
2022-11-25 12:00 ` Hans de Goede
2022-11-25 11:15 ` Hans de Goede
2022-11-25 14:46 ` Laurent Pinchart
2022-11-28 16:11 ` Hans de Goede
2022-11-28 18:22 ` Laurent Pinchart
2022-11-25 11:02 ` Hans de Goede
2022-11-25 14:40 ` Laurent Pinchart
2022-11-28 11:28 ` Hans de Goede
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e7fb85f9-9e39-e33e-61b7-14e02cfafb88@redhat.com \
--to=hdegoede@redhat.com \
--cc=andy@kernel.org \
--cc=dan.scally@ideasonboard.com \
--cc=djrscally@gmail.com \
--cc=hpa@redhat.com \
--cc=linux-media@vger.kernel.org \
--cc=markgross@kernel.org \
--cc=platform-driver-x86@vger.kernel.org \
--cc=sakari.ailus@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox