All of lore.kernel.org
 help / color / mirror / Atom feed
From: s.hauer@pengutronix.de (Sascha Hauer)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 19/22] Input: tsc2007: Add device tree support.
Date: Mon, 15 Jul 2013 23:43:01 +0200	[thread overview]
Message-ID: <20130715214301.GF10995@pengutronix.de> (raw)
In-Reply-To: <1373900227-341-20-git-send-email-denis@eukrea.com>

On Mon, Jul 15, 2013 at 04:57:04PM +0200, Denis Carikli wrote:
> Set the of_match_table for this driver so that devices can be described
>   in the device tree.
> 
> Signed-off-by: Denis Carikli <denis@eukrea.com>
> ---
>  .../bindings/input/touchscreen/tsc2007.txt         |   44 +++++
>  drivers/input/touchscreen/tsc2007.c                |  205 ++++++++++++++++----
>  2 files changed, 206 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 at 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..c0af04b 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 (ts->gpio >= 0)
> +		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);

Initializing tsc->gpio to an illegal gpio for the non dt case makes
ts->of unnecessary and the core driver dt agnostic.

> -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;
> +	struct pinctrl *pinctrl;
> +	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 one path of an if/else needs braces the other should have braces
aswell.

>  
> -	if (!i2c_check_functionality(client->adapter,
> -				     I2C_FUNC_SMBUS_READ_WORD_DATA))
> -		return -EIO;
> -
> -	ts = kzalloc(sizeof(struct tsc2007), GFP_KERNEL);
> -	input_dev = input_allocate_device();
> -	if (!ts || !input_dev) {
> -		err = -ENOMEM;
> -		goto err_free_mem;
> +	pinctrl = devm_pinctrl_get_select_default(&client->dev);
> +	if (IS_ERR(pinctrl)) {
> +		err = PTR_ERR(pinctrl);
> +		return err;

The driver core will do this for you already.

>  	}
>  
> -	ts->client = client;
> -	ts->irq = client->irq;
> -	ts->input = input_dev;
> -	init_waitqueue_head(&ts->wait);
> +	ts->gpio = of_get_gpio(np, 0);
> +	if (ts->gpio < 0)
> +		pr_err("GPIO not found (of_get_gpio returned %d)\n", ts->gpio);

use dev_err.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

  parent reply	other threads:[~2013-07-15 21:43 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-15 14:56 Devicetree support for Eukrea cpuimx{25,35,51} Denis Carikli
2013-07-15 14:56 ` [PATCH 01/22] ARM i.MX25: devicetree: add compatible property for imxfb support Denis Carikli
2013-07-15 21:16   ` Sascha Hauer
2013-07-15 21:22     ` Fabio Estevam
2013-07-15 14:56 ` [PATCH 02/22] arm/dts: imx25.dtsi: Add an alias for the LCD controller Denis Carikli
2013-07-15 14:56 ` [PATCH 03/22] pinctrl: pinctrl-imx: add imx25 pinctrl driver Denis Carikli
2013-07-16  7:46   ` Shawn Guo
2013-09-05 13:04     ` Fabio Estevam
2013-09-05 13:10       ` Eric Bénard
2013-07-15 14:56 ` [PATCH 04/22] arm/dts: imx25.dtsi: Add some pinmux pins Denis Carikli
2013-07-16  7:49   ` Shawn Guo
2013-07-15 14:56 ` [PATCH 05/22] ARM: i.MX25 DT: use auxdata to attach imxfb_platform_data Denis Carikli
2013-07-15 21:19   ` Sascha Hauer
2013-07-15 14:56 ` [PATCH 06/22] arm/dts: i.MX25: Add ssi clocks and DMA events Denis Carikli
2013-07-15 21:20   ` Sascha Hauer
2013-07-16  8:17   ` Shawn Guo
2013-07-15 14:56 ` [PATCH 07/22] arm/dts: i.MX25: Add sdma script path Denis Carikli
2013-07-16  8:37   ` Shawn Guo
2013-07-15 14:56 ` [PATCH 08/22] ASoC: eukrea-tlv320: Add DT support Denis Carikli
2013-07-16  8:40   ` Shawn Guo
2013-07-15 14:56 ` [PATCH 09/22] arm/dts: imx25.dtsi: Add an alias for the Audio Multiplexer Denis Carikli
2013-07-15 14:56 ` [PATCH 10/22] arm/dts: Add support for the cpuimx25 board from Eukrea and its baseboard Denis Carikli
2013-07-15 21:26   ` Sascha Hauer
2013-07-16  8:47   ` Shawn Guo
2013-07-15 14:56 ` [PATCH 11/22] arm/dts: imx51.dtsi: i2c1 : Add pinctrl configuration Denis Carikli
2013-07-15 14:56 ` [PATCH 12/22] video: backlight: Add GPIO Backlight driver Denis Carikli
2013-07-16  8:49   ` Shawn Guo
2013-07-15 14:56 ` [PATCH 13/22] lcd: Add GPIO LCD driver Denis Carikli
2013-07-15 15:30   ` Alexander Shiyan
2013-07-15 16:14   ` Fabio Estevam
2013-07-15 14:56 ` [PATCH 14/22] staging: imx-drm: use of_get_display_timings Denis Carikli
2013-07-15 14:57 ` [PATCH 15/22] drm: Add the lacking DRM_MODE_FLAG_* for matching the DISPLAY_FLAGS_* Denis Carikli
2013-07-15 21:30   ` Sascha Hauer
2013-07-15 14:57 ` [PATCH 16/22] staging: drm/imx: ipuv3-crtc: don't harcode some mode flags Denis Carikli
2013-07-15 14:57 ` [PATCH 17/22] [media] v4l2: add new V4L2_PIX_FMT_RGB666 pixel format Denis Carikli
2013-07-15 14:57 ` [PATCH 18/22] staging: video: imx: Add RGB666 support for parallel display Denis Carikli
2013-07-15 18:27   ` Fabio Estevam
2013-07-15 14:57 ` [PATCH 19/22] Input: tsc2007: Add device tree support Denis Carikli
2013-07-15 16:08   ` Fabio Estevam
2013-07-15 21:43   ` Sascha Hauer [this message]
2013-07-15 14:57 ` [PATCH 20/22] arm/dts: Add support for the cpuimx51 board from Eukrea and its baseboard Denis Carikli
2013-07-15 18:10   ` Fabio Estevam
2013-07-15 14:57 ` [PATCH 21/22] DT: Add basic support for imx35-based devices Denis Carikli
2013-07-15 15:19   ` Alexander Shiyan
2013-07-15 21:50   ` Sascha Hauer
2013-07-15 14:57 ` [PATCH 22/22] arm/dts: Add support for the cpuimx35 board from Eukrea and its baseboard Denis Carikli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130715214301.GF10995@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.