devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
  • * [Patch v2][ 04/37] [media] v4l2: add new V4L2_PIX_FMT_RGB666 pixel format.
           [not found] <1382022155-21954-1-git-send-email-denis@eukrea.com>
           [not found] ` <1382022155-21954-1-git-send-email-denis-fO0SIAKYzcbQT0dZR+AlfA@public.gmane.org>
    @ 2013-10-17 15:02 ` Denis Carikli
      2013-10-31 13:18   ` Mauro Carvalho Chehab
      2013-10-17 15:02 ` [Patch v2][ 05/37] fbdev: Add the lacking FB_SYNC_* for matching the DISPLAY_FLAGS_* Denis Carikli
                       ` (3 subsequent siblings)
      5 siblings, 1 reply; 35+ messages in thread
    From: Denis Carikli @ 2013-10-17 15:02 UTC (permalink / raw)
      To: Sascha Hauer
      Cc: Mark Rutland, devicetree, driverdev-devel, Laurent Pinchart,
    	Pawel Moll, Stephen Warren, David Airlie, Greg Kroah-Hartman,
    	Ian Campbell, Rob Herring, Denis Carikli, dri-devel,
    	Eric Bénard, linux-media, linux-arm-kernel,
    	Mauro Carvalho Chehab
    
    That new macro is needed by the imx_drm staging driver
      for supporting the QVGA display of the eukrea-cpuimx51 board.
    
    Cc: Rob Herring <rob.herring@calxeda.com>
    Cc: Pawel Moll <pawel.moll@arm.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Stephen Warren <swarren@wwwdotorg.org>
    Cc: Ian Campbell <ijc+devicetree@hellion.org.uk>
    Cc: devicetree@vger.kernel.org
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: driverdev-devel@linuxdriverproject.org
    Cc: David Airlie <airlied@linux.ie>
    Cc: dri-devel@lists.freedesktop.org
    Cc: Mauro Carvalho Chehab <m.chehab@samsung.com>
    Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Cc: linux-media@vger.kernel.org
    Cc: Sascha Hauer <kernel@pengutronix.de>
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Eric Bénard <eric@eukrea.com>
    Signed-off-by: Denis Carikli <denis@eukrea.com>
    ---
     include/uapi/linux/videodev2.h |    1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
    index 437f1b0..e8ff410 100644
    --- a/include/uapi/linux/videodev2.h
    +++ b/include/uapi/linux/videodev2.h
    @@ -294,6 +294,7 @@ struct v4l2_pix_format {
     #define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16  RGB-5-5-5 BE  */
     #define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16  RGB-5-6-5 BE  */
     #define V4L2_PIX_FMT_BGR666  v4l2_fourcc('B', 'G', 'R', 'H') /* 18  BGR-6-6-6	  */
    +#define V4L2_PIX_FMT_RGB666  v4l2_fourcc('R', 'G', 'B', 'H') /* 18  RGB-6-6-6	  */
     #define V4L2_PIX_FMT_BGR24   v4l2_fourcc('B', 'G', 'R', '3') /* 24  BGR-8-8-8     */
     #define V4L2_PIX_FMT_RGB24   v4l2_fourcc('R', 'G', 'B', '3') /* 24  RGB-8-8-8     */
     #define V4L2_PIX_FMT_BGR32   v4l2_fourcc('B', 'G', 'R', '4') /* 32  BGR-8-8-8-8   */
    -- 
    1.7.9.5
    
    _______________________________________________
    devel mailing list
    devel@linuxdriverproject.org
    http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
    
    ^ permalink raw reply related	[flat|nested] 35+ messages in thread
  • * [Patch v2][ 05/37] fbdev: Add the lacking FB_SYNC_* for matching the DISPLAY_FLAGS_*
           [not found] <1382022155-21954-1-git-send-email-denis@eukrea.com>
           [not found] ` <1382022155-21954-1-git-send-email-denis-fO0SIAKYzcbQT0dZR+AlfA@public.gmane.org>
      2013-10-17 15:02 ` [Patch v2][ 04/37] [media] v4l2: add new V4L2_PIX_FMT_RGB666 pixel format Denis Carikli
    @ 2013-10-17 15:02 ` Denis Carikli
      2013-10-19 11:08   ` Jean-Christophe PLAGNIOL-VILLARD
      2013-10-17 15:02 ` [Patch v2][ 13/37] staging: imx-drm: Add RGB666 support for parallel display Denis Carikli
                       ` (2 subsequent siblings)
      5 siblings, 1 reply; 35+ messages in thread
    From: Denis Carikli @ 2013-10-17 15:02 UTC (permalink / raw)
      To: Sascha Hauer
      Cc: Mark Rutland, devicetree, linux-fbdev, Pawel Moll, Stephen Warren,
    	Ian Campbell, Rob Herring, Denis Carikli, Tomi Valkeinen,
    	Eric Bénard, Jean-Christophe Plagniol-Villard,
    	linux-arm-kernel
    
    Without that fix, drivers using the fb_videomode_from_videomode
      function will not be able to get certain information because
      some DISPLAY_FLAGS_* have no corresponding FB_SYNC_*.
    
    Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
    Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
    Cc: linux-fbdev@vger.kernel.org
    Cc: Rob Herring <rob.herring@calxeda.com>
    Cc: Pawel Moll <pawel.moll@arm.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Stephen Warren <swarren@wwwdotorg.org>
    Cc: Ian Campbell <ijc+devicetree@hellion.org.uk>
    Cc: devicetree@vger.kernel.org
    Cc: Sascha Hauer <kernel@pengutronix.de>
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Eric Bénard <eric@eukrea.com>
    Signed-off-by: Denis Carikli <denis@eukrea.com>
    ---
     drivers/video/fbmon.c   |    4 ++++
     include/uapi/linux/fb.h |    2 ++
     2 files changed, 6 insertions(+)
    
    diff --git a/drivers/video/fbmon.c b/drivers/video/fbmon.c
    index 6103fa6..29a9ed0 100644
    --- a/drivers/video/fbmon.c
    +++ b/drivers/video/fbmon.c
    @@ -1402,6 +1402,10 @@ int fb_videomode_from_videomode(const struct videomode *vm,
     		fbmode->sync |= FB_SYNC_HOR_HIGH_ACT;
     	if (vm->flags & DISPLAY_FLAGS_VSYNC_HIGH)
     		fbmode->sync |= FB_SYNC_VERT_HIGH_ACT;
    +	if (vm->flags & DISPLAY_FLAGS_DE_HIGH)
    +		fbmode->sync |= FB_SYNC_DE_HIGH_ACT;
    +	if (vm->flags & DISPLAY_FLAGS_PIXDATA_POSEDGE)
    +		fbmode->sync |= FB_SYNC_PIXDAT_HIGH_ACT;
     	if (vm->flags & DISPLAY_FLAGS_INTERLACED)
     		fbmode->vmode |= FB_VMODE_INTERLACED;
     	if (vm->flags & DISPLAY_FLAGS_DOUBLESCAN)
    diff --git a/include/uapi/linux/fb.h b/include/uapi/linux/fb.h
    index fb795c3..30487df 100644
    --- a/include/uapi/linux/fb.h
    +++ b/include/uapi/linux/fb.h
    @@ -215,6 +215,8 @@ struct fb_bitfield {
     					/* vtotal = 144d/288n/576i => PAL  */
     					/* vtotal = 121d/242n/484i => NTSC */
     #define FB_SYNC_ON_GREEN	32	/* sync on green */
    +#define FB_SYNC_DE_HIGH_ACT	64	/* data enable high active */
    +#define FB_SYNC_PIXDAT_HIGH_ACT	64	/* data enable high active */
     
     #define FB_VMODE_NONINTERLACED  0	/* non interlaced */
     #define FB_VMODE_INTERLACED	1	/* interlaced	*/
    -- 
    1.7.9.5
    
    
    _______________________________________________
    linux-arm-kernel mailing list
    linux-arm-kernel@lists.infradead.org
    http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
    
    ^ permalink raw reply related	[flat|nested] 35+ messages in thread
  • * [Patch v2][ 13/37] staging: imx-drm: Add RGB666 support for parallel display
           [not found] <1382022155-21954-1-git-send-email-denis@eukrea.com>
                       ` (2 preceding siblings ...)
      2013-10-17 15:02 ` [Patch v2][ 05/37] fbdev: Add the lacking FB_SYNC_* for matching the DISPLAY_FLAGS_* Denis Carikli
    @ 2013-10-17 15:02 ` Denis Carikli
      2013-10-31 13:18   ` Mauro Carvalho Chehab
      2013-10-17 15:02 ` [Patch v2][ 14/37] staging: imx-drm: parallel display: add regulator support Denis Carikli
      2013-10-17 15:02 ` [Patch v2][ 15/37] Input: tsc2007: Add device tree support Denis Carikli
      5 siblings, 1 reply; 35+ messages in thread
    From: Denis Carikli @ 2013-10-17 15:02 UTC (permalink / raw)
      To: Sascha Hauer
      Cc: Mark Rutland, devicetree, driverdev-devel, Laurent Pinchart,
    	Pawel Moll, Stephen Warren, David Airlie, Greg Kroah-Hartman,
    	Ian Campbell, Rob Herring, Denis Carikli, dri-devel,
    	Eric Bénard, linux-media, linux-arm-kernel,
    	Mauro Carvalho Chehab
    
    Support the RGB666 format on the IPUv3 parallel display.
    
    Cc: Rob Herring <rob.herring@calxeda.com>
    Cc: Pawel Moll <pawel.moll@arm.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Stephen Warren <swarren@wwwdotorg.org>
    Cc: Ian Campbell <ijc+devicetree@hellion.org.uk>
    Cc: devicetree@vger.kernel.org
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: driverdev-devel@linuxdriverproject.org
    Cc: David Airlie <airlied@linux.ie>
    Cc: dri-devel@lists.freedesktop.org
    Cc: Mauro Carvalho Chehab <m.chehab@samsung.com>
    Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Cc: linux-media@vger.kernel.org
    Cc: Sascha Hauer <kernel@pengutronix.de>
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Eric Bénard <eric@eukrea.com>
    Signed-off-by: Denis Carikli <denis@eukrea.com>
    ---
     .../bindings/staging/imx-drm/fsl-imx-drm.txt       |    2 +-
     drivers/staging/imx-drm/ipu-v3/ipu-dc.c            |    9 +++++++++
     drivers/staging/imx-drm/parallel-display.c         |    2 ++
     3 files changed, 12 insertions(+), 1 deletion(-)
    
    diff --git a/Documentation/devicetree/bindings/staging/imx-drm/fsl-imx-drm.txt b/Documentation/devicetree/bindings/staging/imx-drm/fsl-imx-drm.txt
    index b876d49..2d24425 100644
    --- a/Documentation/devicetree/bindings/staging/imx-drm/fsl-imx-drm.txt
    +++ b/Documentation/devicetree/bindings/staging/imx-drm/fsl-imx-drm.txt
    @@ -29,7 +29,7 @@ Required properties:
     - crtc: the crtc this display is connected to, see below
     Optional properties:
     - interface_pix_fmt: How this display is connected to the
    -  crtc. Currently supported types: "rgb24", "rgb565", "bgr666"
    +  crtc. Currently supported types: "rgb24", "rgb565", "bgr666", "rgb666"
     - edid: verbatim EDID data block describing attached display.
     - ddc: phandle describing the i2c bus handling the display data
       channel
    diff --git a/drivers/staging/imx-drm/ipu-v3/ipu-dc.c b/drivers/staging/imx-drm/ipu-v3/ipu-dc.c
    index 21bf1c8..c84ad22 100644
    --- a/drivers/staging/imx-drm/ipu-v3/ipu-dc.c
    +++ b/drivers/staging/imx-drm/ipu-v3/ipu-dc.c
    @@ -91,6 +91,7 @@ enum ipu_dc_map {
     	IPU_DC_MAP_RGB565,
     	IPU_DC_MAP_GBR24, /* TVEv2 */
     	IPU_DC_MAP_BGR666,
    +	IPU_DC_MAP_RGB666,
     };
     
     struct ipu_dc {
    @@ -152,6 +153,8 @@ static int ipu_pixfmt_to_map(u32 fmt)
     		return IPU_DC_MAP_GBR24;
     	case V4L2_PIX_FMT_BGR666:
     		return IPU_DC_MAP_BGR666;
    +	case V4L2_PIX_FMT_RGB666:
    +		return IPU_DC_MAP_RGB666;
     	default:
     		return -EINVAL;
     	}
    @@ -395,6 +398,12 @@ int ipu_dc_init(struct ipu_soc *ipu, struct device *dev,
     	ipu_dc_map_config(priv, IPU_DC_MAP_BGR666, 1, 11, 0xfc); /* green */
     	ipu_dc_map_config(priv, IPU_DC_MAP_BGR666, 2, 17, 0xfc); /* red */
     
    +	/* rgb666 */
    +	ipu_dc_map_clear(priv, IPU_DC_MAP_BGR666);
    +	ipu_dc_map_config(priv, IPU_DC_MAP_RGB666, 2, 17, 0xfc); /* red */
    +	ipu_dc_map_config(priv, IPU_DC_MAP_RGB666, 1, 11, 0xfc); /* green */
    +	ipu_dc_map_config(priv, IPU_DC_MAP_RGB666, 0, 5, 0xfc); /* blue */
    +
     	return 0;
     }
     
    diff --git a/drivers/staging/imx-drm/parallel-display.c b/drivers/staging/imx-drm/parallel-display.c
    index c04b017..1c8f63f 100644
    --- a/drivers/staging/imx-drm/parallel-display.c
    +++ b/drivers/staging/imx-drm/parallel-display.c
    @@ -238,6 +238,8 @@ static int imx_pd_probe(struct platform_device *pdev)
     			imxpd->interface_pix_fmt = V4L2_PIX_FMT_RGB565;
     		else if (!strcmp(fmt, "bgr666"))
     			imxpd->interface_pix_fmt = V4L2_PIX_FMT_BGR666;
    +		else if (!strcmp(fmt, "rgb666"))
    +			imxpd->interface_pix_fmt = V4L2_PIX_FMT_RGB666;
     	}
     
     	imxpd->dev = &pdev->dev;
    -- 
    1.7.9.5
    
    _______________________________________________
    devel mailing list
    devel@linuxdriverproject.org
    http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
    
    ^ permalink raw reply related	[flat|nested] 35+ messages in thread
  • * [Patch v2][ 14/37] staging: imx-drm: parallel display: add regulator support.
           [not found] <1382022155-21954-1-git-send-email-denis@eukrea.com>
                       ` (3 preceding siblings ...)
      2013-10-17 15:02 ` [Patch v2][ 13/37] staging: imx-drm: Add RGB666 support for parallel display Denis Carikli
    @ 2013-10-17 15:02 ` Denis Carikli
      2013-10-17 16:47   ` Dan Carpenter
      2013-10-17 15:02 ` [Patch v2][ 15/37] Input: tsc2007: Add device tree support Denis Carikli
      5 siblings, 1 reply; 35+ messages in thread
    From: Denis Carikli @ 2013-10-17 15:02 UTC (permalink / raw)
      To: Sascha Hauer
      Cc: Mark Rutland, devicetree, driverdev-devel, Pawel Moll,
    	Stephen Warren, David Airlie, Greg Kroah-Hartman, Ian Campbell,
    	Rob Herring, Denis Carikli, dri-devel, Eric Bénard,
    	linux-arm-kernel
    
    Cc: Rob Herring <rob.herring@calxeda.com>
    Cc: Pawel Moll <pawel.moll@arm.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Stephen Warren <swarren@wwwdotorg.org>
    Cc: Ian Campbell <ijc+devicetree@hellion.org.uk>
    Cc: devicetree@vger.kernel.org
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: driverdev-devel@linuxdriverproject.org
    Cc: David Airlie <airlied@linux.ie>
    Cc: dri-devel@lists.freedesktop.org
    Cc: Sascha Hauer <kernel@pengutronix.de>
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Eric Bénard <eric@eukrea.com>
    Signed-off-by: Denis Carikli <denis@eukrea.com>
    ---
     drivers/staging/imx-drm/parallel-display.c |   19 +++++++++++++++++++
     1 file changed, 19 insertions(+)
    
    diff --git a/drivers/staging/imx-drm/parallel-display.c b/drivers/staging/imx-drm/parallel-display.c
    index 1c8f63f..dfab7b5 100644
    --- a/drivers/staging/imx-drm/parallel-display.c
    +++ b/drivers/staging/imx-drm/parallel-display.c
    @@ -22,6 +22,7 @@
     #include <drm/drmP.h>
     #include <drm/drm_fb_helper.h>
     #include <drm/drm_crtc_helper.h>
    +#include <linux/regulator/consumer.h>
     #include <linux/videodev2.h>
     #include <video/videomode.h>
     #include <video/of_display_timing.h>
    @@ -37,6 +38,7 @@ struct imx_parallel_display {
     	struct drm_encoder encoder;
     	struct imx_drm_encoder *imx_drm_encoder;
     	struct device *dev;
    +	struct regulator *lcd_reg;
     	void *edid;
     	int edid_len;
     	u32 interface_pix_fmt;
    @@ -129,6 +131,10 @@ static void imx_pd_encoder_prepare(struct drm_encoder *encoder)
     {
     	struct imx_parallel_display *imxpd = enc_to_imxpd(encoder);
     
    +	if (imxpd->lcd_reg)
    +		if (regulator_enable(imxpd->lcd_reg))
    +			dev_err(imxpd->dev, "Failed to enable lcd regulator.\n");
    +
     	imx_drm_crtc_panel_format(encoder->crtc, DRM_MODE_ENCODER_NONE,
     			imxpd->interface_pix_fmt);
     }
    @@ -145,6 +151,11 @@ static void imx_pd_encoder_mode_set(struct drm_encoder *encoder,
     
     static void imx_pd_encoder_disable(struct drm_encoder *encoder)
     {
    +	struct imx_parallel_display *imxpd = enc_to_imxpd(encoder);
    +
    +	if (imxpd->lcd_reg)
    +		if (regulator_disable(imxpd->lcd_reg))
    +			dev_err(imxpd->dev, "Failed to disable lcd regulator.\n");
     }
     
     static void imx_pd_encoder_destroy(struct drm_encoder *encoder)
    @@ -248,6 +259,14 @@ static int imx_pd_probe(struct platform_device *pdev)
     	if (ret)
     		return ret;
     
    +	imxpd->lcd_reg = devm_regulator_get(&pdev->dev, "lcd");
    +	if (IS_ERR(imxpd->lcd_reg)) {
    +		dev_dbg(&pdev->dev, "no lcd-supply given.\n");
    +		imxpd->lcd_reg = NULL;
    +	} else {
    +		dev_info(&pdev->dev, "lcd-supply found.\n");
    +	}
    +
     	ret = imx_drm_encoder_add_possible_crtcs(imxpd->imx_drm_encoder, np);
     
     	platform_set_drvdata(pdev, imxpd);
    -- 
    1.7.9.5
    
    _______________________________________________
    devel mailing list
    devel@linuxdriverproject.org
    http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
    
    ^ permalink raw reply related	[flat|nested] 35+ messages in thread
  • * [Patch v2][ 15/37] Input: tsc2007: Add device tree support.
           [not found] <1382022155-21954-1-git-send-email-denis@eukrea.com>
                       ` (4 preceding siblings ...)
      2013-10-17 15:02 ` [Patch v2][ 14/37] staging: imx-drm: parallel display: add regulator support Denis Carikli
    @ 2013-10-17 15:02 ` Denis Carikli
      2013-10-18  8:36   ` Lothar Waßmann
      5 siblings, 1 reply; 35+ messages in thread
    From: Denis Carikli @ 2013-10-17 15:02 UTC (permalink / raw)
      To: Sascha Hauer
      Cc: linux-arm-kernel, Eric Bénard, Denis Carikli, Rob Herring,
    	Pawel Moll, Mark Rutland, Stephen Warren, Ian Campbell,
    	devicetree, Dmitry Torokhov, linux-input
    
    Cc: Rob Herring <rob.herring@calxeda.com>
    Cc: Pawel Moll <pawel.moll@arm.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Stephen Warren <swarren@wwwdotorg.org>
    Cc: Ian Campbell <ijc+devicetree@hellion.org.uk>
    Cc: devicetree@vger.kernel.org
    Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Cc: linux-input@vger.kernel.org
    Cc: Sascha Hauer <kernel@pengutronix.de>
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Eric Bénard <eric@eukrea.com>
    Signed-off-by: Denis Carikli <denis@eukrea.com>
    ---
     .../bindings/input/touchscreen/tsc2007.txt         |   44 +++++
     drivers/input/touchscreen/tsc2007.c                |  200 +++++++++++++++-----
     2 files changed, 201 insertions(+), 43 deletions(-)
     create mode 100644 Documentation/devicetree/bindings/input/touchscreen/tsc2007.txt
    
    diff --git a/Documentation/devicetree/bindings/input/touchscreen/tsc2007.txt b/Documentation/devicetree/bindings/input/touchscreen/tsc2007.txt
    new file mode 100644
    index 0000000..d67b33f
    --- /dev/null
    +++ b/Documentation/devicetree/bindings/input/touchscreen/tsc2007.txt
    @@ -0,0 +1,44 @@
    +* Texas Instruments tsc2007 touchscreen controller
    +
    +Required properties:
    +- compatible: must be "ti,tsc2007".
    +- reg: I2C address of the chip.
    +- pinctrl-0: Should specify pin control groups used for this controller
    +  (see pinctrl bindings[0]).
    +- pinctrl-names: Should contain only one value - "default"
    +  (see pinctrl bindings[0]).
    +- interrupt-parent: the phandle for the interrupt controller
    +  (see interrupt binding[1]).
    +- interrupts: interrupt to which the chip is connected
    +  (see interrupt binding[1]).
    +- x-plate-ohms: X-plate resistance in ohms.
    +
    +Optional properties:
    +- gpios: the interrupt gpio the chip is connected to (trough the penirq pin)
    +  (see GPIO binding[2] for more details).
    +- max-rt: maximum pressure.
    +- fuzzy: specifies the fuzz value that is used to filter noise from the event
    +  stream.
    +- poll-period: how much time to wait(in millisecond) before reading again the
    +  values from the tsc2007.
    +
    +[0]: Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt
    +[1]: Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
    +[2]: Documentation/devicetree/bindings/gpio/gpio.txt
    +
    +Example:
    +	&i2c1 {
    +		/* ... */
    +		tsc2007@49 {
    +			compatible = "ti,tsc2007";
    +			reg = <0x49>;
    +			pinctrl-names = "default";
    +			pinctrl-0 = <&pinctrl_tsc2007_1>;
    +			interrupt-parent = <&gpio4>;
    +			interrupts = <0x0 0x8>;
    +			gpios = <&gpio4 0 0>;
    +			x-plate-ohms = <180>;
    +		};
    +
    +		/* ... */
    +	};
    diff --git a/drivers/input/touchscreen/tsc2007.c b/drivers/input/touchscreen/tsc2007.c
    index 0b67ba4..b1ab6c0 100644
    --- a/drivers/input/touchscreen/tsc2007.c
    +++ b/drivers/input/touchscreen/tsc2007.c
    @@ -26,6 +26,9 @@
     #include <linux/interrupt.h>
     #include <linux/i2c.h>
     #include <linux/i2c/tsc2007.h>
    +#include <linux/of_device.h>
    +#include <linux/of.h>
    +#include <linux/of_gpio.h>
     
     #define TSC2007_MEASURE_TEMP0		(0x0 << 4)
     #define TSC2007_MEASURE_AUX		(0x2 << 4)
    @@ -74,7 +77,10 @@ struct tsc2007 {
     	u16			max_rt;
     	unsigned long		poll_delay;
     	unsigned long		poll_period;
    +	int			fuzzy;
    +	char			of;
     
    +	unsigned		gpio;
     	int			irq;
     
     	wait_queue_head_t	wait;
    @@ -84,6 +90,14 @@ struct tsc2007 {
     	void			(*clear_penirq)(void);
     };
     
    +static int tsc2007_get_pendown_state_dt(struct tsc2007  *ts)
    +{
    +	if (gpio_is_valid(ts->gpio))
    +		return !gpio_get_value(ts->gpio);
    +	else
    +		return true;
    +}
    +
     static inline int tsc2007_xfer(struct tsc2007 *tsc, u8 cmd)
     {
     	s32 data;
    @@ -158,6 +172,9 @@ static bool tsc2007_is_pen_down(struct tsc2007 *ts)
     	 * to fall back on the pressure reading.
     	 */
     
    +	if (ts->of)
    +		return tsc2007_get_pendown_state_dt(ts);
    +
     	if (!ts->get_pendown_state)
     		return true;
     
    @@ -175,10 +192,10 @@ static irqreturn_t tsc2007_soft_irq(int irq, void *handle)
     
     		/* pen is down, continue with the measurement */
     		tsc2007_read_values(ts, &tc);
    -
     		rt = tsc2007_calculate_pressure(ts, &tc);
     
    -		if (rt == 0 && !ts->get_pendown_state) {
    +		if ((ts->of && rt == 0 && ts->gpio < 0) ||
    +			(!ts->of && rt == 0 && !ts->get_pendown_state)) {
     			/*
     			 * If pressure reported is 0 and we don't have
     			 * callback to check pendown state, we have to
    @@ -198,7 +215,6 @@ static irqreturn_t tsc2007_soft_irq(int irq, void *handle)
     			input_report_abs(input, ABS_PRESSURE, rt);
     
     			input_sync(input);
    -
     		} else {
     			/*
     			 * Sample found inconsistent by debouncing or pressure is
    @@ -217,7 +233,6 @@ static irqreturn_t tsc2007_soft_irq(int irq, void *handle)
     	input_report_key(input, BTN_TOUCH, 0);
     	input_report_abs(input, ABS_PRESSURE, 0);
     	input_sync(input);
    -
     	if (ts->clear_penirq)
     		ts->clear_penirq();
     
    @@ -228,11 +243,17 @@ static irqreturn_t tsc2007_hard_irq(int irq, void *handle)
     {
     	struct tsc2007 *ts = handle;
     
    -	if (!ts->get_pendown_state || likely(ts->get_pendown_state()))
    -		return IRQ_WAKE_THREAD;
    +	if (!ts->of) {
    +		if (!ts->get_pendown_state || likely(ts->get_pendown_state()))
    +			return IRQ_WAKE_THREAD;
     
    -	if (ts->clear_penirq)
    -		ts->clear_penirq();
    +		if (ts->clear_penirq)
    +			ts->clear_penirq();
    +	} else {
    +		if ((!gpio_is_valid(ts->gpio)) ||
    +		    likely(tsc2007_get_pendown_state_dt(ts)))
    +			return IRQ_WAKE_THREAD;
    +	}
     
     	return IRQ_HANDLED;
     }
    @@ -273,34 +294,64 @@ static void tsc2007_close(struct input_dev *input_dev)
     	tsc2007_stop(ts);
     }
     
    -static int tsc2007_probe(struct i2c_client *client,
    -				   const struct i2c_device_id *id)
    +#ifdef CONFIG_OF
    +static int tsc2007_probe_dt(struct i2c_client *client, struct tsc2007 *ts,
    +			    struct device_node *np)
     {
    -	struct tsc2007 *ts;
    -	struct tsc2007_platform_data *pdata = client->dev.platform_data;
    -	struct input_dev *input_dev;
    -	int err;
    -
    -	if (!pdata) {
    -		dev_err(&client->dev, "platform data is required!\n");
    +	int err = 0;
    +	u32 val32;
    +	u64 val64;
    +
    +	if (!of_property_read_u32(np, "max-rt", &val32))
    +		ts->max_rt = val32;
    +	else
    +		ts->max_rt = MAX_12BIT;
    +
    +	if (!of_property_read_u32(np, "fuzzy", &val32))
    +		ts->fuzzy = val32;
    +
    +	if (!of_property_read_u64(np, "poll-period", &val64))
    +		ts->poll_period = val64;
    +	else
    +		ts->poll_period = 1;
    +
    +	if (!of_property_read_u32(np, "x-plate-ohms", &val32)) {
    +		ts->x_plate_ohms = val32;
    +	} else {
    +		dev_err(&client->dev,
    +			"x-plate-ohms is not set up in the devicetree."
    +			" (err %d).", err);
     		return -EINVAL;
     	}
     
    -	if (!i2c_check_functionality(client->adapter,
    -				     I2C_FUNC_SMBUS_READ_WORD_DATA))
    -		return -EIO;
    +	ts->gpio = of_get_gpio(np, 0);
    +	if (!gpio_is_valid(ts->gpio))
    +		dev_err(&client->dev, "GPIO not found "
    +			"(of_get_gpio returned %d)\n", ts->gpio);
     
    -	ts = kzalloc(sizeof(struct tsc2007), GFP_KERNEL);
    -	input_dev = input_allocate_device();
    -	if (!ts || !input_dev) {
    -		err = -ENOMEM;
    -		goto err_free_mem;
    -	}
    +	/* Used to detect if it is probed trough the device tree,
    +	 * in order to be able to use that information in the IRQ handler.
    +	 */
    +	ts->of = 1;
     
    -	ts->client = client;
    -	ts->irq = client->irq;
    -	ts->input = input_dev;
    -	init_waitqueue_head(&ts->wait);
    +	return 0;
    +}
    +#else
    +static int tsc2007_probe_dt(struct i2c_client *client, struct tsc2007 *ts,
    +			    struct device_node *np)
    +{
    +	return -ENODEV;
    +}
    +#endif
    +
    +static int tsc2007_probe_pdev(struct i2c_client *client, struct tsc2007 *ts,
    +			      struct tsc2007_platform_data *pdata,
    +			      const struct i2c_device_id *id)
    +{
    +	if (!pdata) {
    +		dev_err(&client->dev, "platform data is required!\n");
    +		return -EINVAL;
    +	}
     
     	ts->model             = pdata->model;
     	ts->x_plate_ohms      = pdata->x_plate_ohms;
    @@ -309,13 +360,59 @@ static int tsc2007_probe(struct i2c_client *client,
     	ts->poll_period       = pdata->poll_period ? : 1;
     	ts->get_pendown_state = pdata->get_pendown_state;
     	ts->clear_penirq      = pdata->clear_penirq;
    +	ts->fuzzy             = pdata->fuzzy;
     
     	if (pdata->x_plate_ohms == 0) {
     		dev_err(&client->dev, "x_plate_ohms is not set up in platform data");
    -		err = -EINVAL;
    +		return -EINVAL;
    +	}
    +
    +	/* Used to detect if it is probed trough the device tree,
    +	 * in order to be able to use that information in the IRQ handler.
    +	 */
    +	ts->of = 0;
    +
    +	return 0;
    +}
    +
    +static int tsc2007_probe(struct i2c_client *client,
    +			 const struct i2c_device_id *id)
    +{
    +	struct device_node *np = client->dev.of_node;
    +	struct tsc2007_platform_data *pdata = client->dev.platform_data;
    +	struct tsc2007 *ts;
    +	struct input_dev *input_dev;
    +	int err = 0;
    +
    +	ts = kzalloc(sizeof(struct tsc2007), GFP_KERNEL);
    +	if (!ts)
    +		return -ENOMEM;
    +
    +	if (np)
    +		err = tsc2007_probe_dt(client, ts, np);
    +	else
    +		err = tsc2007_probe_pdev(client, ts, pdata, id);
    +
    +	if (err)
    +		goto err_free_mem;
    +
    +	if (!i2c_check_functionality(client->adapter,
    +				     I2C_FUNC_SMBUS_READ_WORD_DATA)) {
    +		err = -EIO;
     		goto err_free_mem;
     	}
     
    +	input_dev = input_allocate_device();
    +	if (!input_dev) {
    +		err = -ENOMEM;
    +		goto err_free_input;
    +	};
    +
    +	ts->client = client;
    +	ts->irq = client->irq;
    +	ts->input = input_dev;
    +	init_waitqueue_head(&ts->wait);
    +
     	snprintf(ts->phys, sizeof(ts->phys),
     		 "%s/input0", dev_name(&client->dev));
     
    @@ -331,19 +428,21 @@ static int tsc2007_probe(struct i2c_client *client,
     	input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
     	input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
     
    -	input_set_abs_params(input_dev, ABS_X, 0, MAX_12BIT, pdata->fuzzx, 0);
    -	input_set_abs_params(input_dev, ABS_Y, 0, MAX_12BIT, pdata->fuzzy, 0);
    +	input_set_abs_params(input_dev, ABS_X, 0, MAX_12BIT, ts->fuzzy, 0);
    +	input_set_abs_params(input_dev, ABS_Y, 0, MAX_12BIT, ts->fuzzy, 0);
     	input_set_abs_params(input_dev, ABS_PRESSURE, 0, MAX_12BIT,
    -			pdata->fuzzz, 0);
    +			     ts->fuzzy, 0);
     
    -	if (pdata->init_platform_hw)
    -		pdata->init_platform_hw();
    +	if (!np) {
    +		if (pdata->init_platform_hw)
    +			pdata->init_platform_hw();
    +	}
     
     	err = request_threaded_irq(ts->irq, tsc2007_hard_irq, tsc2007_soft_irq,
     				   IRQF_ONESHOT, client->dev.driver->name, ts);
     	if (err < 0) {
     		dev_err(&client->dev, "irq %d busy?\n", ts->irq);
    -		goto err_free_mem;
    +		goto err_free_input;
     	}
     
     	tsc2007_stop(ts);
    @@ -358,23 +457,29 @@ static int tsc2007_probe(struct i2c_client *client,
     
      err_free_irq:
     	free_irq(ts->irq, ts);
    -	if (pdata->exit_platform_hw)
    -		pdata->exit_platform_hw();
    - err_free_mem:
    +	if (!np) {
    +		if (pdata->exit_platform_hw)
    +			pdata->exit_platform_hw();
    +	}
    + err_free_input:
     	input_free_device(input_dev);
    + err_free_mem:
     	kfree(ts);
     	return err;
     }
     
     static int tsc2007_remove(struct i2c_client *client)
     {
    +	struct device_node *np = client->dev.of_node;
     	struct tsc2007	*ts = i2c_get_clientdata(client);
     	struct tsc2007_platform_data *pdata = client->dev.platform_data;
     
     	free_irq(ts->irq, ts);
     
    -	if (pdata->exit_platform_hw)
    -		pdata->exit_platform_hw();
    +	if (!np) {
    +		if (pdata->exit_platform_hw)
    +			pdata->exit_platform_hw();
    +	}
     
     	input_unregister_device(ts->input);
     	kfree(ts);
    @@ -389,10 +494,19 @@ static const struct i2c_device_id tsc2007_idtable[] = {
     
     MODULE_DEVICE_TABLE(i2c, tsc2007_idtable);
     
    +#ifdef CONFIG_OF
    +static const struct of_device_id tsc2007_of_match[] = {
    +	{ .compatible = "ti,tsc2007" },
    +	{ /* sentinel */ },
    +};
    +MODULE_DEVICE_TABLE(of, tsc2007_of_match);
    +#endif
    +
     static struct i2c_driver tsc2007_driver = {
     	.driver = {
     		.owner	= THIS_MODULE,
    -		.name	= "tsc2007"
    +		.name	= "tsc2007",
    +		.of_match_table = of_match_ptr(tsc2007_of_match),
     	},
     	.id_table	= tsc2007_idtable,
     	.probe		= tsc2007_probe,
    -- 
    1.7.9.5
    
    --
    To unsubscribe from this list: send the line "unsubscribe linux-input" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at  http://vger.kernel.org/majordomo-info.html
    
    ^ permalink raw reply related	[flat|nested] 35+ messages in thread

  • end of thread, other threads:[~2013-10-31 14:06 UTC | newest]
    
    Thread overview: 35+ messages (download: mbox.gz follow: Atom feed
    -- links below jump to the message on this page --
         [not found] <1382022155-21954-1-git-send-email-denis@eukrea.com>
         [not found] ` <1382022155-21954-1-git-send-email-denis-fO0SIAKYzcbQT0dZR+AlfA@public.gmane.org>
    2013-10-17 15:01   ` [Patch v2][ 01/37] of: add vendor prefix for Eukréa Electromatique Denis Carikli
    2013-10-17 15:02   ` [Patch v2][ 02/37] dma: ipu: Add devicetree support Denis Carikli
         [not found]     ` <1382022155-21954-3-git-send-email-denis-fO0SIAKYzcbQT0dZR+AlfA@public.gmane.org>
    2013-10-18  6:42       ` Sascha Hauer
    2013-10-17 15:02   ` [Patch v2][ 06/37] video: backlight: gpio-backlight: Add DT support Denis Carikli
    2013-10-17 15:02   ` [Patch v2][ 08/37] video: mx3fb: Add device tree suport Denis Carikli
    2013-10-19 11:04     ` Jean-Christophe PLAGNIOL-VILLARD
         [not found]       ` <20131019110459.GM18477-HVbc7XotTAhnXn40ka+A6Q@public.gmane.org>
    2013-10-21  8:03         ` Sascha Hauer
    2013-10-17 15:02   ` [Patch v2][ 10/37] video: imxfb: Also add pwmr for the device tree Denis Carikli
         [not found]     ` <1382022155-21954-11-git-send-email-denis-fO0SIAKYzcbQT0dZR+AlfA@public.gmane.org>
    2013-10-19 10:57       ` Jean-Christophe PLAGNIOL-VILLARD
    2013-10-17 15:02   ` [Patch v2][ 16/37] ASoC: eukrea-tlv320: Add DT support Denis Carikli
         [not found]     ` <1382022155-21954-17-git-send-email-denis-fO0SIAKYzcbQT0dZR+AlfA@public.gmane.org>
    2013-10-18  9:19       ` Lothar Waßmann
    2013-10-17 15:02   ` [Patch v2][ 17/37] DT: Add basic support for imx35-based devices Denis Carikli
         [not found]     ` <1382022155-21954-18-git-send-email-denis-fO0SIAKYzcbQT0dZR+AlfA@public.gmane.org>
    2013-10-18  6:58       ` Sascha Hauer
    2013-10-17 15:02   ` [Patch v2][ 18/37] ARM: imx{25,27} DT: Permit the selection of the imxfb framebuffer driver Denis Carikli
    2013-10-17 15:02   ` [Patch v2][ 19/37] pinctrl: pinctrl-imx: add imx25 pinctrl driver Denis Carikli
    2013-10-17 15:02   ` [Patch v2][ 20/37] arm/dts: imx25.dtsi: Add some pinmux pins Denis Carikli
         [not found]     ` <1382022155-21954-21-git-send-email-denis-fO0SIAKYzcbQT0dZR+AlfA@public.gmane.org>
    2013-10-18  7:02       ` Sascha Hauer
    2013-10-17 15:02   ` [Patch v2][ 21/37] arm/dts: i.MX25: Add ssi clocks and DMA events Denis Carikli
    2013-10-17 15:02   ` [Patch v2][ 22/37] arm/dts: i.MX25: Add sdma script path Denis Carikli
    2013-10-17 15:02   ` [Patch v2][ 23/37] arm/dts: imx25.dtsi: Add an alias for the Audio Multiplexer Denis Carikli
    2013-10-17 15:02   ` [Patch v2][ 24/37] arm/dts: Add support for the cpuimx25 board from Eukrea and its baseboard Denis Carikli
    2013-10-17 15:02   ` [Patch v2][ 25/37] arm/dts: imx51.dtsi: Add some pinmux pins Denis Carikli
    2013-10-17 15:02   ` [Patch v2][ 26/37] arm/dts: Add support for the cpuimx51 board from Eukrea and its baseboard Denis Carikli
    2013-10-17 15:02   ` [Patch v2][ 27/37] arm/dts: Add support for the cpuimx35 " Denis Carikli
    2013-10-17 15:02 ` [Patch v2][ 04/37] [media] v4l2: add new V4L2_PIX_FMT_RGB666 pixel format Denis Carikli
    2013-10-31 13:18   ` Mauro Carvalho Chehab
    2013-10-31 14:06     ` Laurent Pinchart
    2013-10-17 15:02 ` [Patch v2][ 05/37] fbdev: Add the lacking FB_SYNC_* for matching the DISPLAY_FLAGS_* Denis Carikli
    2013-10-19 11:08   ` Jean-Christophe PLAGNIOL-VILLARD
    2013-10-17 15:02 ` [Patch v2][ 13/37] staging: imx-drm: Add RGB666 support for parallel display Denis Carikli
    2013-10-31 13:18   ` Mauro Carvalho Chehab
    2013-10-17 15:02 ` [Patch v2][ 14/37] staging: imx-drm: parallel display: add regulator support Denis Carikli
    2013-10-17 16:47   ` Dan Carpenter
    2013-10-17 15:02 ` [Patch v2][ 15/37] Input: tsc2007: Add device tree support Denis Carikli
    2013-10-18  8:36   ` Lothar Waßmann
    

    This is a public inbox, see mirroring instructions
    for how to clone and mirror all data and code used for this inbox;
    as well as URLs for NNTP newsgroup(s).