All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Chen-Yu Tsai <wens@csie.org>
Cc: Maxime Ripard <maxime.ripard@free-electrons.com>,
	linux-input@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	Hans de Goede <hdegoede@redhat.com>,
	Sugar <shuge@allwinnertech.com>,
	Meng Zhang <kevin@allwinnertech.com>
Subject: Re: [PATCH 1/2] Input: sun4i-ts: Add support for touchpanel controller on A31
Date: Mon, 26 Jan 2015 23:59:21 -0800	[thread overview]
Message-ID: <20150127075921.GA11487@dtor-ws> (raw)
In-Reply-To: <1422110028-30270-2-git-send-email-wens@csie.org>

On Sat, Jan 24, 2015 at 10:33:47PM +0800, Chen-Yu Tsai wrote:
> The Allwinner A31 SoC (sun6i) has the same resistive touchpanel
> controller as on other sunxi platforms. The only difference between
> the variants is the control bits for enabling operations are
> left-shifted by 1 on the A31.
> 
> This patch adds support for this variant.
> 
> Also update the comment for the original temperature sensor with
> information from Allwinner.
> 
> Signed-off-by: Chen-Yu Tsai <wens@csie.org>

Applied, thank you.

> ---
>  .../bindings/input/touchscreen/sun4i.txt           |  2 +-
>  drivers/input/touchscreen/sun4i-ts.c               | 46 ++++++++++++++++------
>  2 files changed, 34 insertions(+), 14 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/input/touchscreen/sun4i.txt b/Documentation/devicetree/bindings/input/touchscreen/sun4i.txt
> index a8405bab6c00..433332d3b2ba 100644
> --- a/Documentation/devicetree/bindings/input/touchscreen/sun4i.txt
> +++ b/Documentation/devicetree/bindings/input/touchscreen/sun4i.txt
> @@ -2,7 +2,7 @@ sun4i resistive touchscreen controller
>  --------------------------------------
>  
>  Required properties:
> - - compatible: "allwinner,sun4i-a10-ts"
> + - compatible: "allwinner,sun4i-a10-ts" or "allwinner,sun6i-a31-ts"
>   - reg: mmio address range of the chip
>   - interrupts: interrupt to which the chip is connected
>   - #thermal-sensor-cells: shall be 0
> diff --git a/drivers/input/touchscreen/sun4i-ts.c b/drivers/input/touchscreen/sun4i-ts.c
> index 9ae53d4289fb..b93a28b955fd 100644
> --- a/drivers/input/touchscreen/sun4i-ts.c
> +++ b/drivers/input/touchscreen/sun4i-ts.c
> @@ -72,6 +72,9 @@
>  #define TP_ADC_SELECT(x)	((x) << 3)
>  #define ADC_CHAN_SELECT(x)	((x) << 0)  /* 3 bits */
>  
> +/* on sun6i, bits 3~6 are left shifted by 1 to 4~7 */
> +#define SUN6I_TP_MODE_EN(x)	((x) << 5)
> +
>  /* TP_CTRL2 bits */
>  #define TP_SENSITIVE_ADJUST(x)	((x) << 28) /* 4 bits */
>  #define TP_MODE_SELECT(x)	((x) << 26) /* 2 bits */
> @@ -113,6 +116,8 @@ struct sun4i_ts_data {
>  	unsigned int irq;
>  	bool ignore_fifo_data;
>  	int temp_data;
> +	int temp_offset;
> +	int temp_step;
>  };
>  
>  static void sun4i_ts_irq_handle_input(struct sun4i_ts_data *ts, u32 reg_val)
> @@ -188,17 +193,7 @@ static int sun4i_get_temp(const struct sun4i_ts_data *ts, long *temp)
>  	if (ts->temp_data == -1)
>  		return -EAGAIN;
>  
> -	/*
> -	 * The user manuals do not contain the formula for calculating
> -	 * the temperature. The formula used here is from the AXP209,
> -	 * which is designed by X-Powers, an affiliate of Allwinner:
> -	 *
> -	 *     temperature = -144.7 + (value * 0.1)
> -	 *
> -	 * This should be replaced with the correct one if such information
> -	 * becomes available.
> -	 */
> -	*temp = (ts->temp_data - 1447) * 100;
> +	*temp = (ts->temp_data - ts->temp_offset) * ts->temp_step;
>  
>  	return 0;
>  }
> @@ -249,6 +244,7 @@ static int sun4i_ts_probe(struct platform_device *pdev)
>  	struct device_node *np = dev->of_node;
>  	struct device *hwmon;
>  	int error;
> +	u32 reg;
>  	bool ts_attached;
>  
>  	ts = devm_kzalloc(dev, sizeof(struct sun4i_ts_data), GFP_KERNEL);
> @@ -258,6 +254,25 @@ static int sun4i_ts_probe(struct platform_device *pdev)
>  	ts->dev = dev;
>  	ts->ignore_fifo_data = true;
>  	ts->temp_data = -1;
> +	if (of_device_is_compatible(np, "allwinner,sun6i-a31-ts")) {
> +		/* Allwinner SDK has temperature = -271 + (value / 6) (C) */
> +		ts->temp_offset = 1626;
> +		ts->temp_step = 167;
> +	} else {
> +		/*
> +		 * The user manuals do not contain the formula for calculating
> +		 * the temperature. The formula used here is from the AXP209,
> +		 * which is designed by X-Powers, an affiliate of Allwinner:
> +		 *
> +		 *     temperature = -144.7 + (value * 0.1)
> +		 *
> +		 * Allwinner does not have any documentation whatsoever for
> +		 * this hardware. Moreover, it is claimed that the sensor
> +		 * is inaccurate and cannot work properly.
> +		 */
> +		ts->temp_offset = 1447;
> +		ts->temp_step = 100;
> +	}
>  
>  	ts_attached = of_property_read_bool(np, "allwinner,ts-attached");
>  	if (ts_attached) {
> @@ -314,8 +329,12 @@ static int sun4i_ts_probe(struct platform_device *pdev)
>  	 * Set stylus up debounce to aprox 10 ms, enable debounce, and
>  	 * finally enable tp mode.
>  	 */
> -	writel(STYLUS_UP_DEBOUN(5) | STYLUS_UP_DEBOUN_EN(1) | TP_MODE_EN(1),
> -	       ts->base + TP_CTRL1);
> +	reg = STYLUS_UP_DEBOUN(5) | STYLUS_UP_DEBOUN_EN(1);
> +	if (of_device_is_compatible(np, "allwinner,sun4i-a10-ts"))
> +		reg |= TP_MODE_EN(1);
> +	else
> +		reg |= SUN6I_TP_MODE_EN(1);
> +	writel(reg, ts->base + TP_CTRL1);
>  
>  	/*
>  	 * The thermal core does not register hwmon devices for DT-based
> @@ -364,6 +383,7 @@ static int sun4i_ts_remove(struct platform_device *pdev)
>  
>  static const struct of_device_id sun4i_ts_of_match[] = {
>  	{ .compatible = "allwinner,sun4i-a10-ts", },
> +	{ .compatible = "allwinner,sun6i-a31-ts", },
>  	{ /* sentinel */ }
>  };
>  MODULE_DEVICE_TABLE(of, sun4i_ts_of_match);
> -- 
> 2.1.4
> 

-- 
Dmitry

WARNING: multiple messages have this Message-ID (diff)
From: dmitry.torokhov@gmail.com (Dmitry Torokhov)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/2] Input: sun4i-ts: Add support for touchpanel controller on A31
Date: Mon, 26 Jan 2015 23:59:21 -0800	[thread overview]
Message-ID: <20150127075921.GA11487@dtor-ws> (raw)
In-Reply-To: <1422110028-30270-2-git-send-email-wens@csie.org>

On Sat, Jan 24, 2015 at 10:33:47PM +0800, Chen-Yu Tsai wrote:
> The Allwinner A31 SoC (sun6i) has the same resistive touchpanel
> controller as on other sunxi platforms. The only difference between
> the variants is the control bits for enabling operations are
> left-shifted by 1 on the A31.
> 
> This patch adds support for this variant.
> 
> Also update the comment for the original temperature sensor with
> information from Allwinner.
> 
> Signed-off-by: Chen-Yu Tsai <wens@csie.org>

Applied, thank you.

> ---
>  .../bindings/input/touchscreen/sun4i.txt           |  2 +-
>  drivers/input/touchscreen/sun4i-ts.c               | 46 ++++++++++++++++------
>  2 files changed, 34 insertions(+), 14 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/input/touchscreen/sun4i.txt b/Documentation/devicetree/bindings/input/touchscreen/sun4i.txt
> index a8405bab6c00..433332d3b2ba 100644
> --- a/Documentation/devicetree/bindings/input/touchscreen/sun4i.txt
> +++ b/Documentation/devicetree/bindings/input/touchscreen/sun4i.txt
> @@ -2,7 +2,7 @@ sun4i resistive touchscreen controller
>  --------------------------------------
>  
>  Required properties:
> - - compatible: "allwinner,sun4i-a10-ts"
> + - compatible: "allwinner,sun4i-a10-ts" or "allwinner,sun6i-a31-ts"
>   - reg: mmio address range of the chip
>   - interrupts: interrupt to which the chip is connected
>   - #thermal-sensor-cells: shall be 0
> diff --git a/drivers/input/touchscreen/sun4i-ts.c b/drivers/input/touchscreen/sun4i-ts.c
> index 9ae53d4289fb..b93a28b955fd 100644
> --- a/drivers/input/touchscreen/sun4i-ts.c
> +++ b/drivers/input/touchscreen/sun4i-ts.c
> @@ -72,6 +72,9 @@
>  #define TP_ADC_SELECT(x)	((x) << 3)
>  #define ADC_CHAN_SELECT(x)	((x) << 0)  /* 3 bits */
>  
> +/* on sun6i, bits 3~6 are left shifted by 1 to 4~7 */
> +#define SUN6I_TP_MODE_EN(x)	((x) << 5)
> +
>  /* TP_CTRL2 bits */
>  #define TP_SENSITIVE_ADJUST(x)	((x) << 28) /* 4 bits */
>  #define TP_MODE_SELECT(x)	((x) << 26) /* 2 bits */
> @@ -113,6 +116,8 @@ struct sun4i_ts_data {
>  	unsigned int irq;
>  	bool ignore_fifo_data;
>  	int temp_data;
> +	int temp_offset;
> +	int temp_step;
>  };
>  
>  static void sun4i_ts_irq_handle_input(struct sun4i_ts_data *ts, u32 reg_val)
> @@ -188,17 +193,7 @@ static int sun4i_get_temp(const struct sun4i_ts_data *ts, long *temp)
>  	if (ts->temp_data == -1)
>  		return -EAGAIN;
>  
> -	/*
> -	 * The user manuals do not contain the formula for calculating
> -	 * the temperature. The formula used here is from the AXP209,
> -	 * which is designed by X-Powers, an affiliate of Allwinner:
> -	 *
> -	 *     temperature = -144.7 + (value * 0.1)
> -	 *
> -	 * This should be replaced with the correct one if such information
> -	 * becomes available.
> -	 */
> -	*temp = (ts->temp_data - 1447) * 100;
> +	*temp = (ts->temp_data - ts->temp_offset) * ts->temp_step;
>  
>  	return 0;
>  }
> @@ -249,6 +244,7 @@ static int sun4i_ts_probe(struct platform_device *pdev)
>  	struct device_node *np = dev->of_node;
>  	struct device *hwmon;
>  	int error;
> +	u32 reg;
>  	bool ts_attached;
>  
>  	ts = devm_kzalloc(dev, sizeof(struct sun4i_ts_data), GFP_KERNEL);
> @@ -258,6 +254,25 @@ static int sun4i_ts_probe(struct platform_device *pdev)
>  	ts->dev = dev;
>  	ts->ignore_fifo_data = true;
>  	ts->temp_data = -1;
> +	if (of_device_is_compatible(np, "allwinner,sun6i-a31-ts")) {
> +		/* Allwinner SDK has temperature = -271 + (value / 6) (C) */
> +		ts->temp_offset = 1626;
> +		ts->temp_step = 167;
> +	} else {
> +		/*
> +		 * The user manuals do not contain the formula for calculating
> +		 * the temperature. The formula used here is from the AXP209,
> +		 * which is designed by X-Powers, an affiliate of Allwinner:
> +		 *
> +		 *     temperature = -144.7 + (value * 0.1)
> +		 *
> +		 * Allwinner does not have any documentation whatsoever for
> +		 * this hardware. Moreover, it is claimed that the sensor
> +		 * is inaccurate and cannot work properly.
> +		 */
> +		ts->temp_offset = 1447;
> +		ts->temp_step = 100;
> +	}
>  
>  	ts_attached = of_property_read_bool(np, "allwinner,ts-attached");
>  	if (ts_attached) {
> @@ -314,8 +329,12 @@ static int sun4i_ts_probe(struct platform_device *pdev)
>  	 * Set stylus up debounce to aprox 10 ms, enable debounce, and
>  	 * finally enable tp mode.
>  	 */
> -	writel(STYLUS_UP_DEBOUN(5) | STYLUS_UP_DEBOUN_EN(1) | TP_MODE_EN(1),
> -	       ts->base + TP_CTRL1);
> +	reg = STYLUS_UP_DEBOUN(5) | STYLUS_UP_DEBOUN_EN(1);
> +	if (of_device_is_compatible(np, "allwinner,sun4i-a10-ts"))
> +		reg |= TP_MODE_EN(1);
> +	else
> +		reg |= SUN6I_TP_MODE_EN(1);
> +	writel(reg, ts->base + TP_CTRL1);
>  
>  	/*
>  	 * The thermal core does not register hwmon devices for DT-based
> @@ -364,6 +383,7 @@ static int sun4i_ts_remove(struct platform_device *pdev)
>  
>  static const struct of_device_id sun4i_ts_of_match[] = {
>  	{ .compatible = "allwinner,sun4i-a10-ts", },
> +	{ .compatible = "allwinner,sun6i-a31-ts", },
>  	{ /* sentinel */ }
>  };
>  MODULE_DEVICE_TABLE(of, sun4i_ts_of_match);
> -- 
> 2.1.4
> 

-- 
Dmitry

  reply	other threads:[~2015-01-27  7:59 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-24 14:33 [PATCH 0/2] Input: sun4i-ts: Support touchpanel controller on A31 Chen-Yu Tsai
2015-01-24 14:33 ` Chen-Yu Tsai
2015-01-24 14:33 ` [PATCH 1/2] Input: sun4i-ts: Add support for " Chen-Yu Tsai
2015-01-24 14:33   ` Chen-Yu Tsai
2015-01-27  7:59   ` Dmitry Torokhov [this message]
2015-01-27  7:59     ` Dmitry Torokhov
2015-01-24 14:33 ` [PATCH 2/2] ARM: dts: sun6i: Add resistive touchscreen controller node to dtsi Chen-Yu Tsai
2015-01-24 14:33   ` Chen-Yu Tsai
2015-01-24 14:37   ` Maxime Ripard
2015-01-24 14:37     ` Maxime Ripard

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=20150127075921.GA11487@dtor-ws \
    --to=dmitry.torokhov@gmail.com \
    --cc=hdegoede@redhat.com \
    --cc=kevin@allwinnertech.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-input@vger.kernel.org \
    --cc=maxime.ripard@free-electrons.com \
    --cc=shuge@allwinnertech.com \
    --cc=wens@csie.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.