Re: [PATCH 2/2] pinctrl: ingenic: Add an X1600 group for 18-bit RGB on the top lines

From: Paul Cercueil

Date: Sun Oct 25 2026 - 18:31:53 EST


Hi Olivier,

Le vendredi 23 octobre 2026 à 22:42 +0200, Olivier Louvignes a écrit :
> Boards that wire an 18-bit panel to the six most significant lines of
> each colour leave PA0, PA1, PA8, PA9, PA16 and PA17 free for other
> uses,
> which the cumulative lcd-16bit and lcd-18bit groups would take. Add
> "lcd-18bit-msb" for that wiring.
>
> Used on a HiBy R1, which drives its panel this way and uses PA0, PA1,
> PA16 and PA17 as GPIOs.
>
> Signed-off-by: Olivier Louvignes <olivier@xxxxxxxxx>

Ugh, what a weird setup...

Reviewed-by: Paul Cercueil <paul@xxxxxxxxxxxxxxx>

Cheers,
-Paul

> ---
>  drivers/pinctrl/pinctrl-ingenic.c | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/pinctrl/pinctrl-ingenic.c
> b/drivers/pinctrl/pinctrl-ingenic.c
> index 28e7f1852054..8c424db27fd5 100644
> --- a/drivers/pinctrl/pinctrl-ingenic.c
> +++ b/drivers/pinctrl/pinctrl-ingenic.c
> @@ -2442,6 +2442,17 @@ static int x1600_lcd_24bit_pins[] = {
>   0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
>  };
>  
> +/*
> + * 18-bit RGB on the six most significant lines of each colour of
> the 24-bit
> + * bus, with the clock, data enable and syncs.
> + */
> +static int x1600_lcd_18bit_msb_pins[] = {
> + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
> + 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
> + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
> + 0x18, 0x19, 0x1a, 0x1b,
> +};
> +
>  static int x1600_pwm_pwm0_pins[] = { 0x40, };
>  static int x1600_pwm_pwm1_pins[] = { 0x41, };
>  static int x1600_pwm_pwm2_pins[] = { 0x42, };
> @@ -2503,6 +2514,7 @@ static const struct group_desc x1600_groups[] =
> {
>   INGENIC_PIN_GROUP("lcd-16bit", x1600_lcd_16bit, 0),
>   INGENIC_PIN_GROUP("lcd-18bit", x1600_lcd_18bit, 0),
>   INGENIC_PIN_GROUP("lcd-24bit", x1600_lcd_24bit, 0),
> + INGENIC_PIN_GROUP("lcd-18bit-msb", x1600_lcd_18bit_msb, 0),
>   INGENIC_PIN_GROUP("pwm0", x1600_pwm_pwm0, 0),
>   INGENIC_PIN_GROUP("pwm1", x1600_pwm_pwm1, 0),
>   INGENIC_PIN_GROUP("pwm2", x1600_pwm_pwm2, 0),
> @@ -2549,7 +2561,7 @@ static const char * const x1600_i2s_groups[] =
> {
>  static const char * const x1600_cim_groups[] = { "cim-data", };
>  
>  static const char * const x1600_lcd_groups[] = { "slcd-8bit", "slcd-
> 16bit",
> - "lcd-16bit", "lcd-18bit", "lcd-24bit", "lcd-no-pins",
> + "lcd-16bit", "lcd-18bit", "lcd-24bit", "lcd-18bit-msb",
> "lcd-no-pins",
>  };
>  
>  static const char * const x1600_pwm0_groups[] = { "pwm0", };