From mboxrd@z Thu Jan 1 00:00:00 1970 From: a.hajda@samsung.com (Andrzej Hajda) Date: Tue, 23 Dec 2014 11:38:43 +0100 Subject: [PATCH RFC v3 13/18] drm: panel: Add support for Himax HX8369A MIPI DSI panel In-Reply-To: <1419306399-9387-14-git-send-email-Ying.Liu@freescale.com> References: <1419306399-9387-1-git-send-email-Ying.Liu@freescale.com> <1419306399-9387-14-git-send-email-Ying.Liu@freescale.com> Message-ID: <54994633.9070007@samsung.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Liu Ying, On 12/23/2014 04:46 AM, Liu Ying wrote: > This patch adds support for Himax HX8369A MIPI DSI panel. > > Signed-off-by: Liu Ying > --- > 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. What kind of issues did you have with reset/power logic in prepare/unprepare? As I see it should be just a matter of moving power on/off functions to prepare/unprepare, am I right? > * Add the module author. > * Other minor changes, such as coding style issues. > > .../devicetree/bindings/panel/himax,hx8369a.txt | 41 ++ > drivers/gpu/drm/panel/Kconfig | 5 + > drivers/gpu/drm/panel/Makefile | 1 + > drivers/gpu/drm/panel/panel-himax-hx8369a.c | 573 +++++++++++++++++++++ > 4 files changed, 620 insertions(+) > create mode 100644 Documentation/devicetree/bindings/panel/himax,hx8369a.txt > create mode 100644 drivers/gpu/drm/panel/panel-himax-hx8369a.c > > diff --git a/Documentation/devicetree/bindings/panel/himax,hx8369a.txt b/Documentation/devicetree/bindings/panel/himax,hx8369a.txt > new file mode 100644 > index 0000000..36a2f11 > --- /dev/null > +++ b/Documentation/devicetree/bindings/panel/himax,hx8369a.txt > @@ -0,0 +1,41 @@ > +Himax HX8369A WVGA 16.7M color TFT single chip driver with internal GRAM > + > +Himax HX8369A is a WVGA resolution driving controller. > +It is designed to provide a single chip solution that combines a source > +driver and power supply circuits to drive a TFT dot matrix LCD with > +480RGBx864 dots at the maximum. > + > +The HX8369A supports several interface modes, including MPU MIPI DBI Type > +A/B mode, MIPI DPI/DBI Type C mode, MIPI DSI video mode, MIPI DSI command > +mode and MDDI mode. The interface mode is selected by the external hardware > +pins BS[3:0]. > + > +Currently, only the MIPI DSI video mode is supported. > + > +Required properties: > + - compatible: should be a panel's compatible string > + - reg: the virtual channel number of a DSI peripheral as described in [1] > + - reset-gpios: a GPIO spec for the reset pin > + > +Optional properties: > + - vdd1-supply: I/O and interface power supply > + - vdd2-supply: analog power supply > + - vdd3-supply: logic power supply > + - dsi-vcc-supply: DSI and MDDI power supply > + - vpp-supply: OTP programming voltage > + - bs0-gpios: a GPIO spec for the pin BS0 > + - bs1-gpios: a GPIO spec for the pin BS1 > + - bs2-gpios: a GPIO spec for the pin BS2 > + - bs3-gpios: a GPIO spec for the pin BS3 I wonder if it wouldn't be better to replace it by gpio list, sth like: - bs-gpios: list of four GPIO specs for BS0-BS3 pins At least documentation suggests it [1], it also allows to omit some pins if necessary, but it is just suggestion. [1]: Documentation/devicetree/bindings/gpio/gpio.txt > + > +[1] Documentation/devicetree/bindings/mipi/dsi/mipi-dsi-bus.txt > + > +Example: > + panel { > + compatible = "truly,tft480800-16-e-dsi"; > + reg = <0>; > + pinctrl-names = "default"; > + pinctrl-0 = <&pinctrl_mipi_panel>; > + reset-gpios = <&gpio6 11 GPIO_ACTIVE_LOW>; > + bs2-gpios = <&gpio6 14 GPIO_ACTIVE_HIGH>; > + }; > 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 0000000..6efce8e > --- /dev/null > +++ b/drivers/gpu/drm/panel/panel-himax-hx8369a.c > @@ -0,0 +1,573 @@ > +/* > + * 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