[PATCH RFC v6 16/21] drm: panel: Add support for Himax HX8369A MIPI DSI panel

2014-12-30 Thread Liu Ying
On 12/29/2014 06:50 PM, Andrzej Hajda wrote:
> On 12/29/2014 11:07 AM, Liu Ying wrote:
>> On 12/29/2014 05:09 PM, Andrzej Hajda wrote:
>>> On 12/29/2014 07:39 AM, Liu Ying wrote:
 This patch adds support for Himax HX8369A MIPI DSI panel.

 Signed-off-by: Liu Ying 
 ---
 v5->v6:
* Make the checkpatch.pl script be happier.
* Do not set the dsi channel number to be zero in probe(), because the 
 MIPI DSI
  bus driver would set it.

 v4->v5:
* Address Andrzej Hajda's comments.
* Get the bs-gpios property instead of the bs[3:0]-gpios properties.
* Implement error propagation for panel register configurations.
* Other minor changes to improve the code quality.

 v3->v4:
* Move the relevant dt-bindings to a separate patch to address Stefan
  Wahren's comment.

 v2->v3:
* Sort the included header files alphabetically.

 v1->v2:
* Address almost all comments from Thierry Reding.
* Remove several DT properties as they can be implied by the compatible 
 string.
* Add the HIMAX/himax prefixes to the driver's Kconfig name and driver 
 name.
* Move the driver's Makefile entry place to sort the entries 
 alphabetically.
* Reuse several standard DCS functions instead of inventing wheels.
* Move the panel resetting and power logics to the driver probe/remove 
 stages.
  This may simplify panel prepare/unprepare hooks. The power 
 consumption should
  not change a lot at DPMS since the panel enters sleep mode at that 
 time.
* Add the module author.
* Other minor changes, such as coding style issues.

drivers/gpu/drm/panel/Kconfig   |   5 +
drivers/gpu/drm/panel/Makefile  |   1 +
drivers/gpu/drm/panel/panel-himax-hx8369a.c | 614 
 
3 files changed, 620 insertions(+)
create mode 100644 drivers/gpu/drm/panel/panel-himax-hx8369a.c

 diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
 index 024e98e..81b0bf0 100644
 --- a/drivers/gpu/drm/panel/Kconfig
 +++ b/drivers/gpu/drm/panel/Kconfig
 @@ -16,6 +16,11 @@ config DRM_PANEL_SIMPLE
  that it can be automatically turned off when the panel goes 
 into a
  low power state.

 +config DRM_PANEL_HIMAX_HX8369A
 +  tristate "Himax HX8369A panel"
 +  depends on OF
 +  select DRM_MIPI_DSI
 +
config DRM_PANEL_LD9040
tristate "LD9040 RGB/SPI panel"
depends on OF && SPI
 diff --git a/drivers/gpu/drm/panel/Makefile 
 b/drivers/gpu/drm/panel/Makefile
 index 4b2a043..d5dbe06 100644
 --- a/drivers/gpu/drm/panel/Makefile
 +++ b/drivers/gpu/drm/panel/Makefile
 @@ -1,4 +1,5 @@
obj-$(CONFIG_DRM_PANEL_SIMPLE) += panel-simple.o
 +obj-$(CONFIG_DRM_PANEL_HIMAX_HX8369A) += panel-himax-hx8369a.o
obj-$(CONFIG_DRM_PANEL_LD9040) += panel-ld9040.o
obj-$(CONFIG_DRM_PANEL_S6E8AA0) += panel-s6e8aa0.o
obj-$(CONFIG_DRM_PANEL_SHARP_LQ101R1SX01) += panel-sharp-lq101r1sx01.o
 diff --git a/drivers/gpu/drm/panel/panel-himax-hx8369a.c 
 b/drivers/gpu/drm/panel/panel-himax-hx8369a.c
 new file mode 100644
 index 000..eee36a7
 --- /dev/null
 +++ b/drivers/gpu/drm/panel/panel-himax-hx8369a.c
 @@ -0,0 +1,614 @@
 +/*
 + * Himax HX8369A panel driver.
 + *
 + * Copyright (C) 2011-2014 Freescale Semiconductor, Inc.
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License version 2 as
 + * published by the Free Software Foundation.
 + *
 + * This driver is based on Samsung s6e8aa0 panel driver.
 + */
 +
 +#include 
 +#include 
 +#include 
 +
 +#include 
 +#include 
 +#include 
 +
 +#include 
 +#include 
 +#include 
 +
 +#define WRDISBV   0x51
 +#define WRCTRLD   0x53
 +#define WRCABC0x55
 +#define SETPOWER  0xb1
 +#define SETDISP   0xb2
 +#define SETCYC0xb4
 +#define SETVCOM   0xb6
 +#define SETEXTC   0xb9
 +#define SETMIPI   0xba
 +#define SETPANEL  0xcc
 +#define SETGIP0xd5
 +#define SETGAMMA  0xe0
 +
 +#define HX8369A_MIN_BRIGHTNESS0x00
 +#define HX8369A_MAX_BRIGHTNESS0xff
 +
 +enum hx8369a_mpu_interface {
 +  HX8369A_DBI_TYPE_A_8BIT,
 +  HX8369A_DBI_TYPE_A_9BIT,
 +  HX8369A_DBI_TYPE_A_16BIT,
 +  HX8369A_DBI_TYPE_A_18BIT,
 +  HX8369A_DBI_TYPE_B_8BIT,
 +  HX8369A_DBI_TYPE_B_9BIT,
 +  HX8369A_DBI_TYPE_B_16BIT,
 +  HX8369A_DBI_TYPE_B_18BIT,
 +  HX8369A_DSI_CMD_MODE,
 +  

[PATCH RFC v6 16/21] drm: panel: Add support for Himax HX8369A MIPI DSI panel

2014-12-29 Thread Liu Ying
On 12/29/2014 05:09 PM, Andrzej Hajda wrote:
> On 12/29/2014 07:39 AM, Liu Ying wrote:
>> This patch adds support for Himax HX8369A MIPI DSI panel.
>>
>> Signed-off-by: Liu Ying 
>> ---
>> v5->v6:
>>   * Make the checkpatch.pl script be happier.
>>   * Do not set the dsi channel number to be zero in probe(), because the 
>> MIPI DSI
>> bus driver would set it.
>>
>> v4->v5:
>>   * Address Andrzej Hajda's comments.
>>   * Get the bs-gpios property instead of the bs[3:0]-gpios properties.
>>   * Implement error propagation for panel register configurations.
>>   * Other minor changes to improve the code quality.
>>
>> v3->v4:
>>   * Move the relevant dt-bindings to a separate patch to address Stefan
>> Wahren's comment.
>>
>> v2->v3:
>>   * Sort the included header files alphabetically.
>>
>> v1->v2:
>>   * Address almost all comments from Thierry Reding.
>>   * Remove several DT properties as they can be implied by the compatible 
>> string.
>>   * Add the HIMAX/himax prefixes to the driver's Kconfig name and driver 
>> name.
>>   * Move the driver's Makefile entry place to sort the entries 
>> alphabetically.
>>   * Reuse several standard DCS functions instead of inventing wheels.
>>   * Move the panel resetting and power logics to the driver probe/remove 
>> stages.
>> This may simplify panel prepare/unprepare hooks. The power consumption 
>> should
>> not change a lot at DPMS since the panel enters sleep mode at that time.
>>   * Add the module author.
>>   * Other minor changes, such as coding style issues.
>>
>>   drivers/gpu/drm/panel/Kconfig   |   5 +
>>   drivers/gpu/drm/panel/Makefile  |   1 +
>>   drivers/gpu/drm/panel/panel-himax-hx8369a.c | 614 
>> 
>>   3 files changed, 620 insertions(+)
>>   create mode 100644 drivers/gpu/drm/panel/panel-himax-hx8369a.c
>>
>> diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
>> index 024e98e..81b0bf0 100644
>> --- a/drivers/gpu/drm/panel/Kconfig
>> +++ b/drivers/gpu/drm/panel/Kconfig
>> @@ -16,6 +16,11 @@ config DRM_PANEL_SIMPLE
>>that it can be automatically turned off when the panel goes into a
>>low power state.
>>
>> +config DRM_PANEL_HIMAX_HX8369A
>> +tristate "Himax HX8369A panel"
>> +depends on OF
>> +select DRM_MIPI_DSI
>> +
>>   config DRM_PANEL_LD9040
>>  tristate "LD9040 RGB/SPI panel"
>>  depends on OF && SPI
>> diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile
>> index 4b2a043..d5dbe06 100644
>> --- a/drivers/gpu/drm/panel/Makefile
>> +++ b/drivers/gpu/drm/panel/Makefile
>> @@ -1,4 +1,5 @@
>>   obj-$(CONFIG_DRM_PANEL_SIMPLE) += panel-simple.o
>> +obj-$(CONFIG_DRM_PANEL_HIMAX_HX8369A) += panel-himax-hx8369a.o
>>   obj-$(CONFIG_DRM_PANEL_LD9040) += panel-ld9040.o
>>   obj-$(CONFIG_DRM_PANEL_S6E8AA0) += panel-s6e8aa0.o
>>   obj-$(CONFIG_DRM_PANEL_SHARP_LQ101R1SX01) += panel-sharp-lq101r1sx01.o
>> diff --git a/drivers/gpu/drm/panel/panel-himax-hx8369a.c 
>> b/drivers/gpu/drm/panel/panel-himax-hx8369a.c
>> new file mode 100644
>> index 000..eee36a7
>> --- /dev/null
>> +++ b/drivers/gpu/drm/panel/panel-himax-hx8369a.c
>> @@ -0,0 +1,614 @@
>> +/*
>> + * Himax HX8369A panel driver.
>> + *
>> + * Copyright (C) 2011-2014 Freescale Semiconductor, Inc.
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License version 2 as
>> + * published by the Free Software Foundation.
>> + *
>> + * This driver is based on Samsung s6e8aa0 panel driver.
>> + */
>> +
>> +#include 
>> +#include 
>> +#include 
>> +
>> +#include 
>> +#include 
>> +#include 
>> +
>> +#include 
>> +#include 
>> +#include 
>> +
>> +#define WRDISBV 0x51
>> +#define WRCTRLD 0x53
>> +#define WRCABC  0x55
>> +#define SETPOWER0xb1
>> +#define SETDISP 0xb2
>> +#define SETCYC  0xb4
>> +#define SETVCOM 0xb6
>> +#define SETEXTC 0xb9
>> +#define SETMIPI 0xba
>> +#define SETPANEL0xcc
>> +#define SETGIP  0xd5
>> +#define SETGAMMA0xe0
>> +
>> +#define HX8369A_MIN_BRIGHTNESS  0x00
>> +#define HX8369A_MAX_BRIGHTNESS  0xff
>> +
>> +enum hx8369a_mpu_interface {
>> +HX8369A_DBI_TYPE_A_8BIT,
>> +HX8369A_DBI_TYPE_A_9BIT,
>> +HX8369A_DBI_TYPE_A_16BIT,
>> +HX8369A_DBI_TYPE_A_18BIT,
>> +HX8369A_DBI_TYPE_B_8BIT,
>> +HX8369A_DBI_TYPE_B_9BIT,
>> +HX8369A_DBI_TYPE_B_16BIT,
>> +HX8369A_DBI_TYPE_B_18BIT,
>> +HX8369A_DSI_CMD_MODE,
>> +HX8369A_DBI_TYPE_B_24BIT,
>> +HX8369A_DSI_VIDEO_MODE,
>> +HX8369A_MDDI,
>> +HX8369A_DPI_DBI_TYPE_C_OPT1,
>> +HX8369A_DPI_DBI_TYPE_C_OPT2,
>> +HX8369A_DPI_DBI_TYPE_C_OPT3
>> +};
>> +
>> +enum hx8369a_resolution {
>> +HX8369A_RES_480_864,
>> +HX8369A_RES_480_854,
>> +HX8369A_RES_480_800,
>> +HX8369A_RES_480_640,
>> +HX8369A_RES_360_640,
>> +

[PATCH RFC v6 16/21] drm: panel: Add support for Himax HX8369A MIPI DSI panel

2014-12-29 Thread Liu Ying
This patch adds support for Himax HX8369A MIPI DSI panel.

Signed-off-by: Liu Ying 
---
v5->v6:
 * Make the checkpatch.pl script be happier.
 * Do not set the dsi channel number to be zero in probe(), because the MIPI DSI
   bus driver would set it.

v4->v5:
 * Address Andrzej Hajda's comments.
 * Get the bs-gpios property instead of the bs[3:0]-gpios properties.
 * Implement error propagation for panel register configurations.
 * Other minor changes to improve the code quality.

v3->v4:
 * Move the relevant dt-bindings to a separate patch to address Stefan
   Wahren's comment.

v2->v3:
 * Sort the included header files alphabetically.

v1->v2:
 * Address almost all comments from Thierry Reding.
 * Remove several DT properties as they can be implied by the compatible string.
 * Add the HIMAX/himax prefixes to the driver's Kconfig name and driver name.
 * Move the driver's Makefile entry place to sort the entries alphabetically.
 * Reuse several standard DCS functions instead of inventing wheels.
 * Move the panel resetting and power logics to the driver probe/remove stages.
   This may simplify panel prepare/unprepare hooks. The power consumption should
   not change a lot at DPMS since the panel enters sleep mode at that time.
 * Add the module author.
 * Other minor changes, such as coding style issues.

 drivers/gpu/drm/panel/Kconfig   |   5 +
 drivers/gpu/drm/panel/Makefile  |   1 +
 drivers/gpu/drm/panel/panel-himax-hx8369a.c | 614 
 3 files changed, 620 insertions(+)
 create mode 100644 drivers/gpu/drm/panel/panel-himax-hx8369a.c

diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
index 024e98e..81b0bf0 100644
--- a/drivers/gpu/drm/panel/Kconfig
+++ b/drivers/gpu/drm/panel/Kconfig
@@ -16,6 +16,11 @@ config DRM_PANEL_SIMPLE
  that it can be automatically turned off when the panel goes into a
  low power state.

+config DRM_PANEL_HIMAX_HX8369A
+   tristate "Himax HX8369A panel"
+   depends on OF
+   select DRM_MIPI_DSI
+
 config DRM_PANEL_LD9040
tristate "LD9040 RGB/SPI panel"
depends on OF && SPI
diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile
index 4b2a043..d5dbe06 100644
--- a/drivers/gpu/drm/panel/Makefile
+++ b/drivers/gpu/drm/panel/Makefile
@@ -1,4 +1,5 @@
 obj-$(CONFIG_DRM_PANEL_SIMPLE) += panel-simple.o
+obj-$(CONFIG_DRM_PANEL_HIMAX_HX8369A) += panel-himax-hx8369a.o
 obj-$(CONFIG_DRM_PANEL_LD9040) += panel-ld9040.o
 obj-$(CONFIG_DRM_PANEL_S6E8AA0) += panel-s6e8aa0.o
 obj-$(CONFIG_DRM_PANEL_SHARP_LQ101R1SX01) += panel-sharp-lq101r1sx01.o
diff --git a/drivers/gpu/drm/panel/panel-himax-hx8369a.c 
b/drivers/gpu/drm/panel/panel-himax-hx8369a.c
new file mode 100644
index 000..eee36a7
--- /dev/null
+++ b/drivers/gpu/drm/panel/panel-himax-hx8369a.c
@@ -0,0 +1,614 @@
+/*
+ * Himax HX8369A panel driver.
+ *
+ * Copyright (C) 2011-2014 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This driver is based on Samsung s6e8aa0 panel driver.
+ */
+
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+
+#define WRDISBV0x51
+#define WRCTRLD0x53
+#define WRCABC 0x55
+#define SETPOWER   0xb1
+#define SETDISP0xb2
+#define SETCYC 0xb4
+#define SETVCOM0xb6
+#define SETEXTC0xb9
+#define SETMIPI0xba
+#define SETPANEL   0xcc
+#define SETGIP 0xd5
+#define SETGAMMA   0xe0
+
+#define HX8369A_MIN_BRIGHTNESS 0x00
+#define HX8369A_MAX_BRIGHTNESS 0xff
+
+enum hx8369a_mpu_interface {
+   HX8369A_DBI_TYPE_A_8BIT,
+   HX8369A_DBI_TYPE_A_9BIT,
+   HX8369A_DBI_TYPE_A_16BIT,
+   HX8369A_DBI_TYPE_A_18BIT,
+   HX8369A_DBI_TYPE_B_8BIT,
+   HX8369A_DBI_TYPE_B_9BIT,
+   HX8369A_DBI_TYPE_B_16BIT,
+   HX8369A_DBI_TYPE_B_18BIT,
+   HX8369A_DSI_CMD_MODE,
+   HX8369A_DBI_TYPE_B_24BIT,
+   HX8369A_DSI_VIDEO_MODE,
+   HX8369A_MDDI,
+   HX8369A_DPI_DBI_TYPE_C_OPT1,
+   HX8369A_DPI_DBI_TYPE_C_OPT2,
+   HX8369A_DPI_DBI_TYPE_C_OPT3
+};
+
+enum hx8369a_resolution {
+   HX8369A_RES_480_864,
+   HX8369A_RES_480_854,
+   HX8369A_RES_480_800,
+   HX8369A_RES_480_640,
+   HX8369A_RES_360_640,
+   HX8369A_RES_480_720,
+};
+
+struct hx8369a_panel_desc {
+   const struct drm_display_mode *mode;
+
+   /* ms */
+   unsigned int power_on_delay;
+   unsigned int reset_delay;
+
+   unsigned int dsi_lanes;
+};
+
+struct hx8369a {
+   struct device *dev;
+   struct drm_panel panel;
+
+   const struct hx8369a_panel_desc *pd;
+
+   struct regulator_bulk_data supplies[5];
+   struct gpio_desc *reset_gpio;
+   struct gpio_desc 

[PATCH RFC v6 16/21] drm: panel: Add support for Himax HX8369A MIPI DSI panel

2014-12-29 Thread Andrzej Hajda
On 12/29/2014 11:07 AM, Liu Ying wrote:
> On 12/29/2014 05:09 PM, Andrzej Hajda wrote:
>> On 12/29/2014 07:39 AM, Liu Ying wrote:
>>> This patch adds support for Himax HX8369A MIPI DSI panel.
>>>
>>> Signed-off-by: Liu Ying 
>>> ---
>>> v5->v6:
>>>   * Make the checkpatch.pl script be happier.
>>>   * Do not set the dsi channel number to be zero in probe(), because the 
>>> MIPI DSI
>>> bus driver would set it.
>>>
>>> v4->v5:
>>>   * Address Andrzej Hajda's comments.
>>>   * Get the bs-gpios property instead of the bs[3:0]-gpios properties.
>>>   * Implement error propagation for panel register configurations.
>>>   * Other minor changes to improve the code quality.
>>>
>>> v3->v4:
>>>   * Move the relevant dt-bindings to a separate patch to address Stefan
>>> Wahren's comment.
>>>
>>> v2->v3:
>>>   * Sort the included header files alphabetically.
>>>
>>> v1->v2:
>>>   * Address almost all comments from Thierry Reding.
>>>   * Remove several DT properties as they can be implied by the compatible 
>>> string.
>>>   * Add the HIMAX/himax prefixes to the driver's Kconfig name and driver 
>>> name.
>>>   * Move the driver's Makefile entry place to sort the entries 
>>> alphabetically.
>>>   * Reuse several standard DCS functions instead of inventing wheels.
>>>   * Move the panel resetting and power logics to the driver probe/remove 
>>> stages.
>>> This may simplify panel prepare/unprepare hooks. The power consumption 
>>> should
>>> not change a lot at DPMS since the panel enters sleep mode at that time.
>>>   * Add the module author.
>>>   * Other minor changes, such as coding style issues.
>>>
>>>   drivers/gpu/drm/panel/Kconfig   |   5 +
>>>   drivers/gpu/drm/panel/Makefile  |   1 +
>>>   drivers/gpu/drm/panel/panel-himax-hx8369a.c | 614 
>>> 
>>>   3 files changed, 620 insertions(+)
>>>   create mode 100644 drivers/gpu/drm/panel/panel-himax-hx8369a.c
>>>
>>> diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
>>> index 024e98e..81b0bf0 100644
>>> --- a/drivers/gpu/drm/panel/Kconfig
>>> +++ b/drivers/gpu/drm/panel/Kconfig
>>> @@ -16,6 +16,11 @@ config DRM_PANEL_SIMPLE
>>>   that it can be automatically turned off when the panel goes into a
>>>   low power state.
>>>
>>> +config DRM_PANEL_HIMAX_HX8369A
>>> +   tristate "Himax HX8369A panel"
>>> +   depends on OF
>>> +   select DRM_MIPI_DSI
>>> +
>>>   config DRM_PANEL_LD9040
>>> tristate "LD9040 RGB/SPI panel"
>>> depends on OF && SPI
>>> diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile
>>> index 4b2a043..d5dbe06 100644
>>> --- a/drivers/gpu/drm/panel/Makefile
>>> +++ b/drivers/gpu/drm/panel/Makefile
>>> @@ -1,4 +1,5 @@
>>>   obj-$(CONFIG_DRM_PANEL_SIMPLE) += panel-simple.o
>>> +obj-$(CONFIG_DRM_PANEL_HIMAX_HX8369A) += panel-himax-hx8369a.o
>>>   obj-$(CONFIG_DRM_PANEL_LD9040) += panel-ld9040.o
>>>   obj-$(CONFIG_DRM_PANEL_S6E8AA0) += panel-s6e8aa0.o
>>>   obj-$(CONFIG_DRM_PANEL_SHARP_LQ101R1SX01) += panel-sharp-lq101r1sx01.o
>>> diff --git a/drivers/gpu/drm/panel/panel-himax-hx8369a.c 
>>> b/drivers/gpu/drm/panel/panel-himax-hx8369a.c
>>> new file mode 100644
>>> index 000..eee36a7
>>> --- /dev/null
>>> +++ b/drivers/gpu/drm/panel/panel-himax-hx8369a.c
>>> @@ -0,0 +1,614 @@
>>> +/*
>>> + * Himax HX8369A panel driver.
>>> + *
>>> + * Copyright (C) 2011-2014 Freescale Semiconductor, Inc.
>>> + *
>>> + * This program is free software; you can redistribute it and/or modify
>>> + * it under the terms of the GNU General Public License version 2 as
>>> + * published by the Free Software Foundation.
>>> + *
>>> + * This driver is based on Samsung s6e8aa0 panel driver.
>>> + */
>>> +
>>> +#include 
>>> +#include 
>>> +#include 
>>> +
>>> +#include 
>>> +#include 
>>> +#include 
>>> +
>>> +#include 
>>> +#include 
>>> +#include 
>>> +
>>> +#define WRDISBV0x51
>>> +#define WRCTRLD0x53
>>> +#define WRCABC 0x55
>>> +#define SETPOWER   0xb1
>>> +#define SETDISP0xb2
>>> +#define SETCYC 0xb4
>>> +#define SETVCOM0xb6
>>> +#define SETEXTC0xb9
>>> +#define SETMIPI0xba
>>> +#define SETPANEL   0xcc
>>> +#define SETGIP 0xd5
>>> +#define SETGAMMA   0xe0
>>> +
>>> +#define HX8369A_MIN_BRIGHTNESS 0x00
>>> +#define HX8369A_MAX_BRIGHTNESS 0xff
>>> +
>>> +enum hx8369a_mpu_interface {
>>> +   HX8369A_DBI_TYPE_A_8BIT,
>>> +   HX8369A_DBI_TYPE_A_9BIT,
>>> +   HX8369A_DBI_TYPE_A_16BIT,
>>> +   HX8369A_DBI_TYPE_A_18BIT,
>>> +   HX8369A_DBI_TYPE_B_8BIT,
>>> +   HX8369A_DBI_TYPE_B_9BIT,
>>> +   HX8369A_DBI_TYPE_B_16BIT,
>>> +   HX8369A_DBI_TYPE_B_18BIT,
>>> +   HX8369A_DSI_CMD_MODE,
>>> +   HX8369A_DBI_TYPE_B_24BIT,
>>> +   HX8369A_DSI_VIDEO_MODE,
>>> +   HX8369A_MDDI,
>>> +   HX8369A_DPI_DBI_TYPE_C_OPT1,
>>> +   HX8369A_DPI_DBI_TYPE_C_OPT2,
>>> +   HX8369A_DPI_DBI_TYPE_C_OPT3
>>> +};
>>> +
>>> +enum hx8369a_resolution {
>>> +   

[PATCH RFC v6 16/21] drm: panel: Add support for Himax HX8369A MIPI DSI panel

2014-12-29 Thread Andrzej Hajda
On 12/29/2014 07:39 AM, Liu Ying wrote:
> This patch adds support for Himax HX8369A MIPI DSI panel.
>
> Signed-off-by: Liu Ying 
> ---
> v5->v6:
>  * Make the checkpatch.pl script be happier.
>  * Do not set the dsi channel number to be zero in probe(), because the MIPI 
> DSI
>bus driver would set it.
>
> v4->v5:
>  * Address Andrzej Hajda's comments.
>  * Get the bs-gpios property instead of the bs[3:0]-gpios properties.
>  * Implement error propagation for panel register configurations.
>  * Other minor changes to improve the code quality.
>
> v3->v4:
>  * Move the relevant dt-bindings to a separate patch to address Stefan
>Wahren's comment.
>
> v2->v3:
>  * Sort the included header files alphabetically.
>
> v1->v2:
>  * Address almost all comments from Thierry Reding.
>  * Remove several DT properties as they can be implied by the compatible 
> string.
>  * Add the HIMAX/himax prefixes to the driver's Kconfig name and driver name.
>  * Move the driver's Makefile entry place to sort the entries alphabetically.
>  * Reuse several standard DCS functions instead of inventing wheels.
>  * Move the panel resetting and power logics to the driver probe/remove 
> stages.
>This may simplify panel prepare/unprepare hooks. The power consumption 
> should
>not change a lot at DPMS since the panel enters sleep mode at that time.
>  * Add the module author.
>  * Other minor changes, such as coding style issues.
>
>  drivers/gpu/drm/panel/Kconfig   |   5 +
>  drivers/gpu/drm/panel/Makefile  |   1 +
>  drivers/gpu/drm/panel/panel-himax-hx8369a.c | 614 
> 
>  3 files changed, 620 insertions(+)
>  create mode 100644 drivers/gpu/drm/panel/panel-himax-hx8369a.c
>
> diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
> index 024e98e..81b0bf0 100644
> --- a/drivers/gpu/drm/panel/Kconfig
> +++ b/drivers/gpu/drm/panel/Kconfig
> @@ -16,6 +16,11 @@ config DRM_PANEL_SIMPLE
> that it can be automatically turned off when the panel goes into a
> low power state.
>  
> +config DRM_PANEL_HIMAX_HX8369A
> + tristate "Himax HX8369A panel"
> + depends on OF
> + select DRM_MIPI_DSI
> +
>  config DRM_PANEL_LD9040
>   tristate "LD9040 RGB/SPI panel"
>   depends on OF && SPI
> diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile
> index 4b2a043..d5dbe06 100644
> --- a/drivers/gpu/drm/panel/Makefile
> +++ b/drivers/gpu/drm/panel/Makefile
> @@ -1,4 +1,5 @@
>  obj-$(CONFIG_DRM_PANEL_SIMPLE) += panel-simple.o
> +obj-$(CONFIG_DRM_PANEL_HIMAX_HX8369A) += panel-himax-hx8369a.o
>  obj-$(CONFIG_DRM_PANEL_LD9040) += panel-ld9040.o
>  obj-$(CONFIG_DRM_PANEL_S6E8AA0) += panel-s6e8aa0.o
>  obj-$(CONFIG_DRM_PANEL_SHARP_LQ101R1SX01) += panel-sharp-lq101r1sx01.o
> diff --git a/drivers/gpu/drm/panel/panel-himax-hx8369a.c 
> b/drivers/gpu/drm/panel/panel-himax-hx8369a.c
> new file mode 100644
> index 000..eee36a7
> --- /dev/null
> +++ b/drivers/gpu/drm/panel/panel-himax-hx8369a.c
> @@ -0,0 +1,614 @@
> +/*
> + * Himax HX8369A panel driver.
> + *
> + * Copyright (C) 2011-2014 Freescale Semiconductor, Inc.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This driver is based on Samsung s6e8aa0 panel driver.
> + */
> +
> +#include 
> +#include 
> +#include 
> +
> +#include 
> +#include 
> +#include 
> +
> +#include 
> +#include 
> +#include 
> +
> +#define WRDISBV  0x51
> +#define WRCTRLD  0x53
> +#define WRCABC   0x55
> +#define SETPOWER 0xb1
> +#define SETDISP  0xb2
> +#define SETCYC   0xb4
> +#define SETVCOM  0xb6
> +#define SETEXTC  0xb9
> +#define SETMIPI  0xba
> +#define SETPANEL 0xcc
> +#define SETGIP   0xd5
> +#define SETGAMMA 0xe0
> +
> +#define HX8369A_MIN_BRIGHTNESS   0x00
> +#define HX8369A_MAX_BRIGHTNESS   0xff
> +
> +enum hx8369a_mpu_interface {
> + HX8369A_DBI_TYPE_A_8BIT,
> + HX8369A_DBI_TYPE_A_9BIT,
> + HX8369A_DBI_TYPE_A_16BIT,
> + HX8369A_DBI_TYPE_A_18BIT,
> + HX8369A_DBI_TYPE_B_8BIT,
> + HX8369A_DBI_TYPE_B_9BIT,
> + HX8369A_DBI_TYPE_B_16BIT,
> + HX8369A_DBI_TYPE_B_18BIT,
> + HX8369A_DSI_CMD_MODE,
> + HX8369A_DBI_TYPE_B_24BIT,
> + HX8369A_DSI_VIDEO_MODE,
> + HX8369A_MDDI,
> + HX8369A_DPI_DBI_TYPE_C_OPT1,
> + HX8369A_DPI_DBI_TYPE_C_OPT2,
> + HX8369A_DPI_DBI_TYPE_C_OPT3
> +};
> +
> +enum hx8369a_resolution {
> + HX8369A_RES_480_864,
> + HX8369A_RES_480_854,
> + HX8369A_RES_480_800,
> + HX8369A_RES_480_640,
> + HX8369A_RES_360_640,
> + HX8369A_RES_480_720,
> +};
> +
> +struct hx8369a_panel_desc {
> + const struct drm_display_mode *mode;
> +
> + /* ms */
> + unsigned int power_on_delay;
> + unsigned int