mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
platform/x86: int3472: support the POWER1 GPIO type
INT3472 can describe a second sensor power rail as a GPIO of type POWER1 (0x08), which the driver does not recognise, so the rail is left unmapped and never enabled: int3472-discrete INT3472:01: GPIO type 0x08 unknown; the sensor may not work On the Microsoft Surface Pro 7+ the rear camera's INT3472 (INT347A, ov8865) has such a pin; without it the ov8865 "dvdd" supply resolves to a dummy regulator and the sensor never probes. Define the POWER0 (0x07) and POWER1 (0x08) GPIO types and map POWER1 to a regulator with con_id "dvdd" for all devices, the supply the in-tree ov8865 driver already requests. POWER0 is defined but left unmapped, as no device that uses it is known. With this change the Surface Pro 7+ rear camera probes and streams reliably. Link: https://github.com/linux-surface/linux-surface/pull/1867 Link: https://github.com/linux-surface/linux-surface/pull/2201 Suggested-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Jakob Berg Jespersen <dev@berg.pm> Reviewed-by: Hans de Goede <johannes.goede@oss.qualcomm.com> [Sakari Ailus: Sanitised the commit message a little.] Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
This commit is contained in:
parent
59cab094b8
commit
34e31390a3
|
|
@ -272,6 +272,10 @@ static void int3472_get_con_id_and_polarity(struct int3472_discrete_device *int3
|
|||
*con_id = "avdd";
|
||||
*gpio_flags = GPIO_ACTIVE_HIGH;
|
||||
break;
|
||||
case INT3472_GPIO_TYPE_POWER1:
|
||||
*con_id = "dvdd";
|
||||
*gpio_flags = GPIO_ACTIVE_HIGH;
|
||||
break;
|
||||
case INT3472_GPIO_TYPE_DOVDD:
|
||||
*con_id = "dovdd";
|
||||
*gpio_flags = GPIO_ACTIVE_HIGH;
|
||||
|
|
@ -302,6 +306,8 @@ static void int3472_get_con_id_and_polarity(struct int3472_discrete_device *int3
|
|||
* 0x00 Reset
|
||||
* 0x01 Power down
|
||||
* 0x02 Strobe
|
||||
* 0x07 Power 0
|
||||
* 0x08 Power 1
|
||||
* 0x0b Power enable
|
||||
* 0x0c Clock enable
|
||||
* 0x0d Privacy LED
|
||||
|
|
@ -394,6 +400,7 @@ static int skl_int3472_handle_gpio_resources(struct acpi_resource *ares,
|
|||
case INT3472_GPIO_TYPE_PRIVACY_LED:
|
||||
case INT3472_GPIO_TYPE_STROBE:
|
||||
case INT3472_GPIO_TYPE_POWER_ENABLE:
|
||||
case INT3472_GPIO_TYPE_POWER1:
|
||||
case INT3472_GPIO_TYPE_DOVDD:
|
||||
case INT3472_GPIO_TYPE_HANDSHAKE:
|
||||
gpio = skl_int3472_gpiod_get_from_temp_lookup(int3472, agpio, con_id, gpio_flags);
|
||||
|
|
@ -420,6 +427,7 @@ static int skl_int3472_handle_gpio_resources(struct acpi_resource *ares,
|
|||
case INT3472_GPIO_TYPE_POWER_ENABLE:
|
||||
second_sensor = int3472->quirks.avdd_second_sensor;
|
||||
fallthrough;
|
||||
case INT3472_GPIO_TYPE_POWER1:
|
||||
case INT3472_GPIO_TYPE_DOVDD:
|
||||
case INT3472_GPIO_TYPE_HANDSHAKE:
|
||||
ret = skl_int3472_register_regulator(int3472, gpio, enable_time_us,
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@
|
|||
#define INT3472_GPIO_TYPE_RESET 0x00
|
||||
#define INT3472_GPIO_TYPE_POWERDOWN 0x01
|
||||
#define INT3472_GPIO_TYPE_STROBE 0x02
|
||||
#define INT3472_GPIO_TYPE_POWER0 0x07
|
||||
#define INT3472_GPIO_TYPE_POWER1 0x08
|
||||
#define INT3472_GPIO_TYPE_POWER_ENABLE 0x0b
|
||||
#define INT3472_GPIO_TYPE_CLK_ENABLE 0x0c
|
||||
#define INT3472_GPIO_TYPE_PRIVACY_LED 0x0d
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user