diff mbox series

[v4] drm/i915/dsi: Send proper brightness value via MIPI DCS command

Message ID 20210813024649.7197-1-shawn.c.lee@intel.com (mailing list archive)
State New, archived
Headers show
Series [v4] drm/i915/dsi: Send proper brightness value via MIPI DCS command | expand

Commit Message

Lee, Shawn C Aug. 13, 2021, 2:46 a.m. UTC
Driver has to swap the endian before send brightness level value
to tcon.

v2: Use __be16 instead of u16 to fix sparse warning.

Reported-by: kernel test robot <lkp@intel.com>
Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Vandita Kulkarni <vandita.kulkarni@intel.com>
Cc: Cooper Chiou <cooper.chiou@intel.com>
Cc: William Tseng <william.tseng@intel.com>
Signed-off-by: Lee Shawn C <shawn.c.lee@intel.com>
---
 drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Comments

Jani Nikula Aug. 18, 2021, 11:10 a.m. UTC | #1
On Fri, 13 Aug 2021, Lee Shawn C <shawn.c.lee@intel.com> wrote:
> Driver has to swap the endian before send brightness level value
> to tcon.
>
> v2: Use __be16 instead of u16 to fix sparse warning.
>
> Reported-by: kernel test robot <lkp@intel.com>
> Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
> Cc: Jani Nikula <jani.nikula@linux.intel.com>
> Cc: Vandita Kulkarni <vandita.kulkarni@intel.com>
> Cc: Cooper Chiou <cooper.chiou@intel.com>
> Cc: William Tseng <william.tseng@intel.com>
> Signed-off-by: Lee Shawn C <shawn.c.lee@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.c b/drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.c
> index cd85520d36e2..71c2adfa8931 100644
> --- a/drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.c
> +++ b/drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.c
> @@ -66,10 +66,9 @@ static void dcs_set_backlight(const struct drm_connector_state *conn_state, u32
>  {
>  	struct intel_dsi *intel_dsi = enc_to_intel_dsi(to_intel_encoder(conn_state->best_encoder));
>  	struct mipi_dsi_device *dsi_device;
> -	u8 data = level;
> +	__be16 data = cpu_to_be16(level);

Just discussed this with Vandita. Both the set and get brightness need
to be adjusted, and the read/write size (one or two bytes) has to depend
on the precision. From MIPI DCS spec:

	Note: It is up to display manufacturer to determine the
	implementation of this register and background logic. Only one
	parameter shall be sent for devices that support 8-bit
	brightness levels. Two parameters shall be sent for devices that
	support between 9-bit and 16-bit brightness levels.

BR,
Jani.


>  	enum port port;
>  
> -	/* FIXME: Need to take care of 16 bit brightness level */
>  	for_each_dsi_port(port, intel_dsi->dcs_backlight_ports) {
>  		dsi_device = intel_dsi->dsi_hosts[port]->device;
>  		mipi_dsi_dcs_write(dsi_device, MIPI_DCS_SET_DISPLAY_BRIGHTNESS,
Lee, Shawn C Aug. 18, 2021, 2:58 p.m. UTC | #2
On Wed, 18 Aug 2021, Jani Nikula <jani.nikula@linux.intel.com> wrote:
>On Fri, 13 Aug 2021, Lee Shawn C <shawn.c.lee@intel.com> wrote:
>> Driver has to swap the endian before send brightness level value to 
>> tcon.
>>
>> v2: Use __be16 instead of u16 to fix sparse warning.
>>
>> Reported-by: kernel test robot <lkp@intel.com>
>> Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
>> Cc: Jani Nikula <jani.nikula@linux.intel.com>
>> Cc: Vandita Kulkarni <vandita.kulkarni@intel.com>
>> Cc: Cooper Chiou <cooper.chiou@intel.com>
>> Cc: William Tseng <william.tseng@intel.com>
>> Signed-off-by: Lee Shawn C <shawn.c.lee@intel.com>
>> ---
>>  drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.c | 3 +--
>>  1 file changed, 1 insertion(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.c 
>> b/drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.c
>> index cd85520d36e2..71c2adfa8931 100644
>> --- a/drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.c
>> +++ b/drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.c
>> @@ -66,10 +66,9 @@ static void dcs_set_backlight(const struct 
>> drm_connector_state *conn_state, u32  {
>>  	struct intel_dsi *intel_dsi = enc_to_intel_dsi(to_intel_encoder(conn_state->best_encoder));
>>  	struct mipi_dsi_device *dsi_device;
>> -	u8 data = level;
>> +	__be16 data = cpu_to_be16(level);
>
>Just discussed this with Vandita. Both the set and get brightness need to be adjusted, and the read/write size (one or two bytes) has to depend on the precision. From MIPI DCS spec:
>
>	Note: It is up to display manufacturer to determine the
>	implementation of this register and background logic. Only one
>	parameter shall be sent for devices that support 8-bit
>	brightness levels. Two parameters shall be sent for devices that
>	support between 9-bit and 16-bit brightness levels.
>
>BR,
>Jani.
>

OK! We will send a patch that modify read/write size depend on precision setting.

Best regards,
Shawn

>
>>  	enum port port;
>>  
>> -	/* FIXME: Need to take care of 16 bit brightness level */
>>  	for_each_dsi_port(port, intel_dsi->dcs_backlight_ports) {
>>  		dsi_device = intel_dsi->dsi_hosts[port]->device;
>>  		mipi_dsi_dcs_write(dsi_device, MIPI_DCS_SET_DISPLAY_BRIGHTNESS,
>
>--
>Jani Nikula, Intel Open Source Graphics Center
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.c b/drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.c
index cd85520d36e2..71c2adfa8931 100644
--- a/drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.c
+++ b/drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.c
@@ -66,10 +66,9 @@  static void dcs_set_backlight(const struct drm_connector_state *conn_state, u32
 {
 	struct intel_dsi *intel_dsi = enc_to_intel_dsi(to_intel_encoder(conn_state->best_encoder));
 	struct mipi_dsi_device *dsi_device;
-	u8 data = level;
+	__be16 data = cpu_to_be16(level);
 	enum port port;
 
-	/* FIXME: Need to take care of 16 bit brightness level */
 	for_each_dsi_port(port, intel_dsi->dcs_backlight_ports) {
 		dsi_device = intel_dsi->dsi_hosts[port]->device;
 		mipi_dsi_dcs_write(dsi_device, MIPI_DCS_SET_DISPLAY_BRIGHTNESS,