diff mbox

drm/tinydrm/mi0283qt: Always set rotation value

Message ID 20180423161639.14420-1-tcallawa@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Tom Callaway April 23, 2018, 4:16 p.m. UTC
The PiTFT (ili9340) has a hardware reset circuit that resets only
on power-on and not on each reboot through a gpio like the
rpi-display does. As a result, we need to always apply the
rotation value regardless of the display "on/off" state.
Moved the rotation setting code below out_enable:.

Signed-off-by: Tom Callaway <tcallawa@redhat.com>
---
 drivers/gpu/drm/tinydrm/mi0283qt.c | 41 +++++++++++++++++++++-----------------
 1 file changed, 23 insertions(+), 18 deletions(-)

Comments

Noralf Trønnes April 24, 2018, 4:52 p.m. UTC | #1
Den 23.04.2018 18.16, skrev Tom Callaway:
> The PiTFT (ili9340) has a hardware reset circuit that resets only
> on power-on and not on each reboot through a gpio like the
> rpi-display does. As a result, we need to always apply the
> rotation value regardless of the display "on/off" state.
> Moved the rotation setting code below out_enable:.
>
> Signed-off-by: Tom Callaway <tcallawa@redhat.com>
> ---
>   drivers/gpu/drm/tinydrm/mi0283qt.c | 41 +++++++++++++++++++++-----------------
>   1 file changed, 23 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c
> index 4e6d2ee94e55..2bb9e3ce4823 100644
> --- a/drivers/gpu/drm/tinydrm/mi0283qt.c
> +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c
> @@ -84,24 +84,6 @@ static void mi0283qt_enable(struct drm_simple_display_pipe *pipe,
>   	/* Memory Access Control */
>   	mipi_dbi_command(mipi, MIPI_DCS_SET_PIXEL_FORMAT, MIPI_DCS_PIXEL_FMT_16BIT);
>   
> -	switch (mipi->rotation) {
> -	default:
> -		addr_mode = ILI9341_MADCTL_MV | ILI9341_MADCTL_MY |
> -			    ILI9341_MADCTL_MX;
> -		break;
> -	case 90:
> -		addr_mode = ILI9341_MADCTL_MY;
> -		break;
> -	case 180:
> -		addr_mode = ILI9341_MADCTL_MV;
> -		break;
> -	case 270:
> -		addr_mode = ILI9341_MADCTL_MX;
> -		break;
> -	}
> -	addr_mode |= ILI9341_MADCTL_BGR;
> -	mipi_dbi_command(mipi, MIPI_DCS_SET_ADDRESS_MODE, addr_mode);
> -
>   	/* Frame Rate */
>   	mipi_dbi_command(mipi, ILI9341_FRMCTR1, 0x00, 0x1b);
>   
> @@ -127,6 +109,29 @@ static void mi0283qt_enable(struct drm_simple_display_pipe *pipe,
>   	msleep(100);
>   
>   out_enable:
> +	/* The PiTFT (ili9340) has a hardware reset circuit that
> +	 * resets only on power-on and not on each reboot through
> +	 * a gpio like the rpi-display does.
> +	 * As a result, we need to always apply the rotation value
> +	 * regardless of the display "on/off" state.
> +	 */
> +	switch (mipi->rotation) {
> +	default:
> +		addr_mode = ILI9341_MADCTL_MV | ILI9341_MADCTL_MY |
> +			    ILI9341_MADCTL_MX;
> +		break;
> +	case 90:
> +		addr_mode = ILI9341_MADCTL_MY;
> +		break;
> +	case 180:
> +		addr_mode = ILI9341_MADCTL_MV;
> +		break;
> +	case 270:
> +		addr_mode = ILI9341_MADCTL_MX;
> +		break;
> +	}
> +	addr_mode |= ILI9341_MADCTL_BGR;
> +	mipi_dbi_command(mipi, MIPI_DCS_SET_ADDRESS_MODE, addr_mode);
>   	mipi_dbi_enable_flush(mipi, crtc_state, plane_state);
>   }
>   

Thanks for fixing this.

Reviewed-by: Noralf Trønnes <noralf@tronnes.org>
Daniel Vetter April 24, 2018, 7:16 p.m. UTC | #2
On Tue, Apr 24, 2018 at 6:52 PM, Noralf Trønnes <noralf@tronnes.org> wrote:
>
> Den 23.04.2018 18.16, skrev Tom Callaway:
>>
>> The PiTFT (ili9340) has a hardware reset circuit that resets only
>> on power-on and not on each reboot through a gpio like the
>> rpi-display does. As a result, we need to always apply the
>> rotation value regardless of the display "on/off" state.
>> Moved the rotation setting code below out_enable:.
>>
>> Signed-off-by: Tom Callaway <tcallawa@redhat.com>
>> ---
>>   drivers/gpu/drm/tinydrm/mi0283qt.c | 41
>> +++++++++++++++++++++-----------------
>>   1 file changed, 23 insertions(+), 18 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c
>> b/drivers/gpu/drm/tinydrm/mi0283qt.c
>> index 4e6d2ee94e55..2bb9e3ce4823 100644
>> --- a/drivers/gpu/drm/tinydrm/mi0283qt.c
>> +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c
>> @@ -84,24 +84,6 @@ static void mi0283qt_enable(struct
>> drm_simple_display_pipe *pipe,
>>         /* Memory Access Control */
>>         mipi_dbi_command(mipi, MIPI_DCS_SET_PIXEL_FORMAT,
>> MIPI_DCS_PIXEL_FMT_16BIT);
>>   -     switch (mipi->rotation) {
>> -       default:
>> -               addr_mode = ILI9341_MADCTL_MV | ILI9341_MADCTL_MY |
>> -                           ILI9341_MADCTL_MX;
>> -               break;
>> -       case 90:
>> -               addr_mode = ILI9341_MADCTL_MY;
>> -               break;
>> -       case 180:
>> -               addr_mode = ILI9341_MADCTL_MV;
>> -               break;
>> -       case 270:
>> -               addr_mode = ILI9341_MADCTL_MX;
>> -               break;
>> -       }
>> -       addr_mode |= ILI9341_MADCTL_BGR;
>> -       mipi_dbi_command(mipi, MIPI_DCS_SET_ADDRESS_MODE, addr_mode);
>> -
>>         /* Frame Rate */
>>         mipi_dbi_command(mipi, ILI9341_FRMCTR1, 0x00, 0x1b);
>>   @@ -127,6 +109,29 @@ static void mi0283qt_enable(struct
>> drm_simple_display_pipe *pipe,
>>         msleep(100);
>>     out_enable:
>> +       /* The PiTFT (ili9340) has a hardware reset circuit that
>> +        * resets only on power-on and not on each reboot through
>> +        * a gpio like the rpi-display does.
>> +        * As a result, we need to always apply the rotation value
>> +        * regardless of the display "on/off" state.
>> +        */
>> +       switch (mipi->rotation) {
>> +       default:
>> +               addr_mode = ILI9341_MADCTL_MV | ILI9341_MADCTL_MY |
>> +                           ILI9341_MADCTL_MX;
>> +               break;
>> +       case 90:
>> +               addr_mode = ILI9341_MADCTL_MY;
>> +               break;
>> +       case 180:
>> +               addr_mode = ILI9341_MADCTL_MV;
>> +               break;
>> +       case 270:
>> +               addr_mode = ILI9341_MADCTL_MX;
>> +               break;
>> +       }
>> +       addr_mode |= ILI9341_MADCTL_BGR;
>> +       mipi_dbi_command(mipi, MIPI_DCS_SET_ADDRESS_MODE, addr_mode);
>>         mipi_dbi_enable_flush(mipi, crtc_state, plane_state);
>>   }
>>
>
>
> Thanks for fixing this.
>
> Reviewed-by: Noralf Trønnes <noralf@tronnes.org>

Tom doesn't have commit rights, so would be on you to get this merged.
-Daniel
Noralf Trønnes April 24, 2018, 7:21 p.m. UTC | #3
Den 24.04.2018 21.16, skrev Daniel Vetter:
> On Tue, Apr 24, 2018 at 6:52 PM, Noralf Trønnes <noralf@tronnes.org> wrote:
>> Den 23.04.2018 18.16, skrev Tom Callaway:
>>> The PiTFT (ili9340) has a hardware reset circuit that resets only
>>> on power-on and not on each reboot through a gpio like the
>>> rpi-display does. As a result, we need to always apply the
>>> rotation value regardless of the display "on/off" state.
>>> Moved the rotation setting code below out_enable:.
>>>
>>> Signed-off-by: Tom Callaway <tcallawa@redhat.com>
>>> ---
>>>    drivers/gpu/drm/tinydrm/mi0283qt.c | 41
>>> +++++++++++++++++++++-----------------
>>>    1 file changed, 23 insertions(+), 18 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c
>>> b/drivers/gpu/drm/tinydrm/mi0283qt.c
>>> index 4e6d2ee94e55..2bb9e3ce4823 100644
>>> --- a/drivers/gpu/drm/tinydrm/mi0283qt.c
>>> +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c
>>> @@ -84,24 +84,6 @@ static void mi0283qt_enable(struct
>>> drm_simple_display_pipe *pipe,
>>>          /* Memory Access Control */
>>>          mipi_dbi_command(mipi, MIPI_DCS_SET_PIXEL_FORMAT,
>>> MIPI_DCS_PIXEL_FMT_16BIT);
>>>    -     switch (mipi->rotation) {
>>> -       default:
>>> -               addr_mode = ILI9341_MADCTL_MV | ILI9341_MADCTL_MY |
>>> -                           ILI9341_MADCTL_MX;
>>> -               break;
>>> -       case 90:
>>> -               addr_mode = ILI9341_MADCTL_MY;
>>> -               break;
>>> -       case 180:
>>> -               addr_mode = ILI9341_MADCTL_MV;
>>> -               break;
>>> -       case 270:
>>> -               addr_mode = ILI9341_MADCTL_MX;
>>> -               break;
>>> -       }
>>> -       addr_mode |= ILI9341_MADCTL_BGR;
>>> -       mipi_dbi_command(mipi, MIPI_DCS_SET_ADDRESS_MODE, addr_mode);
>>> -
>>>          /* Frame Rate */
>>>          mipi_dbi_command(mipi, ILI9341_FRMCTR1, 0x00, 0x1b);
>>>    @@ -127,6 +109,29 @@ static void mi0283qt_enable(struct
>>> drm_simple_display_pipe *pipe,
>>>          msleep(100);
>>>      out_enable:
>>> +       /* The PiTFT (ili9340) has a hardware reset circuit that
>>> +        * resets only on power-on and not on each reboot through
>>> +        * a gpio like the rpi-display does.
>>> +        * As a result, we need to always apply the rotation value
>>> +        * regardless of the display "on/off" state.
>>> +        */
>>> +       switch (mipi->rotation) {
>>> +       default:
>>> +               addr_mode = ILI9341_MADCTL_MV | ILI9341_MADCTL_MY |
>>> +                           ILI9341_MADCTL_MX;
>>> +               break;
>>> +       case 90:
>>> +               addr_mode = ILI9341_MADCTL_MY;
>>> +               break;
>>> +       case 180:
>>> +               addr_mode = ILI9341_MADCTL_MV;
>>> +               break;
>>> +       case 270:
>>> +               addr_mode = ILI9341_MADCTL_MX;
>>> +               break;
>>> +       }
>>> +       addr_mode |= ILI9341_MADCTL_BGR;
>>> +       mipi_dbi_command(mipi, MIPI_DCS_SET_ADDRESS_MODE, addr_mode);
>>>          mipi_dbi_enable_flush(mipi, crtc_state, plane_state);
>>>    }
>>>
>>
>> Thanks for fixing this.
>>
>> Reviewed-by: Noralf Trønnes <noralf@tronnes.org>
> Tom doesn't have commit rights, so would be on you to get this merged.
> -Daniel

Sure, that was my intention, should have mentioned it.

Noralf.
Noralf Trønnes April 30, 2018, 9:09 a.m. UTC | #4
Den 24.04.2018 18.52, skrev Noralf Trønnes:
>
> Den 23.04.2018 18.16, skrev Tom Callaway:
>> The PiTFT (ili9340) has a hardware reset circuit that resets only
>> on power-on and not on each reboot through a gpio like the
>> rpi-display does. As a result, we need to always apply the
>> rotation value regardless of the display "on/off" state.
>> Moved the rotation setting code below out_enable:.
>>
>> Signed-off-by: Tom Callaway <tcallawa@redhat.com>
>> ---
>>   drivers/gpu/drm/tinydrm/mi0283qt.c | 41 
>> +++++++++++++++++++++-----------------
>>   1 file changed, 23 insertions(+), 18 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c 
>> b/drivers/gpu/drm/tinydrm/mi0283qt.c
>> index 4e6d2ee94e55..2bb9e3ce4823 100644
>> --- a/drivers/gpu/drm/tinydrm/mi0283qt.c
>> +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c
>> @@ -84,24 +84,6 @@ static void mi0283qt_enable(struct 
>> drm_simple_display_pipe *pipe,
>>       /* Memory Access Control */
>>       mipi_dbi_command(mipi, MIPI_DCS_SET_PIXEL_FORMAT, 
>> MIPI_DCS_PIXEL_FMT_16BIT);
>>   -    switch (mipi->rotation) {
>> -    default:
>> -        addr_mode = ILI9341_MADCTL_MV | ILI9341_MADCTL_MY |
>> -                ILI9341_MADCTL_MX;
>> -        break;
>> -    case 90:
>> -        addr_mode = ILI9341_MADCTL_MY;
>> -        break;
>> -    case 180:
>> -        addr_mode = ILI9341_MADCTL_MV;
>> -        break;
>> -    case 270:
>> -        addr_mode = ILI9341_MADCTL_MX;
>> -        break;
>> -    }
>> -    addr_mode |= ILI9341_MADCTL_BGR;
>> -    mipi_dbi_command(mipi, MIPI_DCS_SET_ADDRESS_MODE, addr_mode);
>> -
>>       /* Frame Rate */
>>       mipi_dbi_command(mipi, ILI9341_FRMCTR1, 0x00, 0x1b);
>>   @@ -127,6 +109,29 @@ static void mi0283qt_enable(struct 
>> drm_simple_display_pipe *pipe,
>>       msleep(100);
>>     out_enable:
>> +    /* The PiTFT (ili9340) has a hardware reset circuit that
>> +     * resets only on power-on and not on each reboot through
>> +     * a gpio like the rpi-display does.
>> +     * As a result, we need to always apply the rotation value
>> +     * regardless of the display "on/off" state.
>> +     */
>> +    switch (mipi->rotation) {
>> +    default:
>> +        addr_mode = ILI9341_MADCTL_MV | ILI9341_MADCTL_MY |
>> +                ILI9341_MADCTL_MX;
>> +        break;
>> +    case 90:
>> +        addr_mode = ILI9341_MADCTL_MY;
>> +        break;
>> +    case 180:
>> +        addr_mode = ILI9341_MADCTL_MV;
>> +        break;
>> +    case 270:
>> +        addr_mode = ILI9341_MADCTL_MX;
>> +        break;
>> +    }
>> +    addr_mode |= ILI9341_MADCTL_BGR;
>> +    mipi_dbi_command(mipi, MIPI_DCS_SET_ADDRESS_MODE, addr_mode);
>>       mipi_dbi_enable_flush(mipi, crtc_state, plane_state);
>>   }
>
> Thanks for fixing this.
>
> Reviewed-by: Noralf Trønnes <noralf@tronnes.org>
>

Applied to drm-misc.

Noralf.
diff mbox

Patch

diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c
index 4e6d2ee94e55..2bb9e3ce4823 100644
--- a/drivers/gpu/drm/tinydrm/mi0283qt.c
+++ b/drivers/gpu/drm/tinydrm/mi0283qt.c
@@ -84,24 +84,6 @@  static void mi0283qt_enable(struct drm_simple_display_pipe *pipe,
 	/* Memory Access Control */
 	mipi_dbi_command(mipi, MIPI_DCS_SET_PIXEL_FORMAT, MIPI_DCS_PIXEL_FMT_16BIT);
 
-	switch (mipi->rotation) {
-	default:
-		addr_mode = ILI9341_MADCTL_MV | ILI9341_MADCTL_MY |
-			    ILI9341_MADCTL_MX;
-		break;
-	case 90:
-		addr_mode = ILI9341_MADCTL_MY;
-		break;
-	case 180:
-		addr_mode = ILI9341_MADCTL_MV;
-		break;
-	case 270:
-		addr_mode = ILI9341_MADCTL_MX;
-		break;
-	}
-	addr_mode |= ILI9341_MADCTL_BGR;
-	mipi_dbi_command(mipi, MIPI_DCS_SET_ADDRESS_MODE, addr_mode);
-
 	/* Frame Rate */
 	mipi_dbi_command(mipi, ILI9341_FRMCTR1, 0x00, 0x1b);
 
@@ -127,6 +109,29 @@  static void mi0283qt_enable(struct drm_simple_display_pipe *pipe,
 	msleep(100);
 
 out_enable:
+	/* The PiTFT (ili9340) has a hardware reset circuit that
+	 * resets only on power-on and not on each reboot through
+	 * a gpio like the rpi-display does.
+	 * As a result, we need to always apply the rotation value
+	 * regardless of the display "on/off" state.
+	 */
+	switch (mipi->rotation) {
+	default:
+		addr_mode = ILI9341_MADCTL_MV | ILI9341_MADCTL_MY |
+			    ILI9341_MADCTL_MX;
+		break;
+	case 90:
+		addr_mode = ILI9341_MADCTL_MY;
+		break;
+	case 180:
+		addr_mode = ILI9341_MADCTL_MV;
+		break;
+	case 270:
+		addr_mode = ILI9341_MADCTL_MX;
+		break;
+	}
+	addr_mode |= ILI9341_MADCTL_BGR;
+	mipi_dbi_command(mipi, MIPI_DCS_SET_ADDRESS_MODE, addr_mode);
 	mipi_dbi_enable_flush(mipi, crtc_state, plane_state);
 }