* [PATCH v4 1/4] input: sun4i-a10-lradc-keys: Add support for A83T
2019-03-27 0:24 [PATCH v4 0/4] Add support for lradc on A83T megous
@ 2019-03-27 0:24 ` megous
2019-03-27 0:24 ` [PATCH v4 2/4] dt-bindings: input: Add R_LRADC " megous
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: megous @ 2019-03-27 0:24 UTC (permalink / raw)
To: maxime.ripard, wens, robh, mark.rutland
Cc: Ziping Chen, devicetree, linux-arm-kernel, linux-kernel, linux-sunxi
From: Ziping Chen <techping.chan@gmail.com>
Allwinner A83T SoC has a low res adc like the one in Allwinner A10 SoC,
however, the A10 SoC's vref of lradc internally is divided by 2/3 and
the A83T SoC's vref of lradc internally is divided by 3/4, thus add
a hardware variant for it to be compatible with various devices.
Signed-off-by: Ziping Chen <techping.chan@gmail.com>
Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>
---
drivers/input/keyboard/sun4i-lradc-keys.c | 38 ++++++++++++++++++++---
1 file changed, 34 insertions(+), 4 deletions(-)
diff --git a/drivers/input/keyboard/sun4i-lradc-keys.c b/drivers/input/keyboard/sun4i-lradc-keys.c
index 57272df34cd5..df3eec72a9b2 100644
--- a/drivers/input/keyboard/sun4i-lradc-keys.c
+++ b/drivers/input/keyboard/sun4i-lradc-keys.c
@@ -46,6 +46,7 @@
#define CONTINUE_TIME_SEL(x) ((x) << 16) /* 4 bits */
#define KEY_MODE_SEL(x) ((x) << 12) /* 2 bits */
#define LEVELA_B_CNT(x) ((x) << 8) /* 4 bits */
+#define HOLD_KEY_EN(x) ((x) << 7)
#define HOLD_EN(x) ((x) << 6)
#define LEVELB_VOL(x) ((x) << 4) /* 2 bits */
#define SAMPLE_RATE(x) ((x) << 2) /* 2 bits */
@@ -63,6 +64,25 @@
#define CHAN0_KEYDOWN_IRQ BIT(1)
#define CHAN0_DATA_IRQ BIT(0)
+/* struct lradc_variant - Describe sun4i-a10-lradc-keys hardware variant
+ * @divisor_numerator: The numerator of lradc Vref internally divisor
+ * @divisor_denominator: The denominator of lradc Vref internally divisor
+ */
+struct lradc_variant {
+ u8 divisor_numerator;
+ u8 divisor_denominator;
+};
+
+static const struct lradc_variant lradc_variant_a10 = {
+ .divisor_numerator = 2,
+ .divisor_denominator = 3
+};
+
+static const struct lradc_variant r_lradc_variant_a83t = {
+ .divisor_numerator = 3,
+ .divisor_denominator = 4
+};
+
struct sun4i_lradc_keymap {
u32 voltage;
u32 keycode;
@@ -74,6 +94,7 @@ struct sun4i_lradc_data {
void __iomem *base;
struct regulator *vref_supply;
struct sun4i_lradc_keymap *chan0_map;
+ const struct lradc_variant *variant;
u32 chan0_map_count;
u32 chan0_keycode;
u32 vref;
@@ -128,9 +149,9 @@ static int sun4i_lradc_open(struct input_dev *dev)
if (error)
return error;
- /* lradc Vref internally is divided by 2/3 */
- lradc->vref = regulator_get_voltage(lradc->vref_supply) * 2 / 3;
-
+ lradc->vref = regulator_get_voltage(lradc->vref_supply) *
+ lradc->variant->divisor_numerator /
+ lradc->variant->divisor_denominator;
/*
* Set sample time to 4 ms / 250 Hz. Wait 2 * 4 ms for key to
* stabilize on press, wait (1 + 1) * 4 ms for key release
@@ -222,6 +243,12 @@ static int sun4i_lradc_probe(struct platform_device *pdev)
if (error)
return error;
+ lradc->variant = of_device_get_match_data(&pdev->dev);
+ if (!lradc->variant) {
+ dev_err(&pdev->dev, "Missing sun4i-a10-lradc-keys variant\n");
+ return -EINVAL;
+ }
+
lradc->vref_supply = devm_regulator_get(dev, "vref");
if (IS_ERR(lradc->vref_supply))
return PTR_ERR(lradc->vref_supply);
@@ -265,7 +292,10 @@ static int sun4i_lradc_probe(struct platform_device *pdev)
}
static const struct of_device_id sun4i_lradc_of_match[] = {
- { .compatible = "allwinner,sun4i-a10-lradc-keys", },
+ { .compatible = "allwinner,sun4i-a10-lradc-keys",
+ .data = &lradc_variant_a10 },
+ { .compatible = "allwinner,sun8i-a83t-r-lradc",
+ .data = &r_lradc_variant_a83t },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, sun4i_lradc_of_match);
--
2.21.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v4 2/4] dt-bindings: input: Add R_LRADC support for A83T
2019-03-27 0:24 [PATCH v4 0/4] Add support for lradc on A83T megous
2019-03-27 0:24 ` [PATCH v4 1/4] input: sun4i-a10-lradc-keys: Add support for A83T megous
@ 2019-03-27 0:24 ` megous
2019-03-27 0:25 ` [PATCH v4 3/4] ARM: dts: sunxi: " megous
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: megous @ 2019-03-27 0:24 UTC (permalink / raw)
To: maxime.ripard, wens, robh, mark.rutland
Cc: Ziping Chen, devicetree, linux-arm-kernel, linux-kernel, linux-sunxi
From: Ziping Chen <techping.chan@gmail.com>
Allwinner A83T SoC has a low res ADC like the one in Allwinner A10 SoC.
Add binding for it.
Signed-off-by: Ziping Chen <techping.chan@gmail.com>
Acked-by: Rob Herring <robh@kernel.org>
---
.../devicetree/bindings/input/sun4i-lradc-keys.txt | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/Documentation/devicetree/bindings/input/sun4i-lradc-keys.txt b/Documentation/devicetree/bindings/input/sun4i-lradc-keys.txt
index 1458c3179a63..496125c6bfb7 100644
--- a/Documentation/devicetree/bindings/input/sun4i-lradc-keys.txt
+++ b/Documentation/devicetree/bindings/input/sun4i-lradc-keys.txt
@@ -2,12 +2,14 @@ Allwinner sun4i low res adc attached tablet keys
------------------------------------------------
Required properties:
- - compatible: "allwinner,sun4i-a10-lradc-keys"
+ - compatible: should be one of the following string:
+ "allwinner,sun4i-a10-lradc-keys"
+ "allwinner,sun8i-a83t-r-lradc"
- reg: mmio address range of the chip
- interrupts: interrupt to which the chip is connected
- vref-supply: powersupply for the lradc reference voltage
-Each key is represented as a sub-node of "allwinner,sun4i-a10-lradc-keys":
+Each key is represented as a sub-node of the compatible mentioned above:
Required subnode-properties:
- label: Descriptive name of the key.
--
2.21.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v4 3/4] ARM: dts: sunxi: Add R_LRADC support for A83T
2019-03-27 0:24 [PATCH v4 0/4] Add support for lradc on A83T megous
2019-03-27 0:24 ` [PATCH v4 1/4] input: sun4i-a10-lradc-keys: Add support for A83T megous
2019-03-27 0:24 ` [PATCH v4 2/4] dt-bindings: input: Add R_LRADC " megous
@ 2019-03-27 0:25 ` megous
2019-03-27 0:25 ` [PATCH v4 4/4] ARM: dts: sun8i: tbs-a711: Add support for volume keys input megous
2019-03-27 2:16 ` [PATCH v4 0/4] Add support for lradc on A83T Chen-Yu Tsai
4 siblings, 0 replies; 6+ messages in thread
From: megous @ 2019-03-27 0:25 UTC (permalink / raw)
To: maxime.ripard, wens, robh, mark.rutland
Cc: Ziping Chen, devicetree, linux-arm-kernel, linux-kernel, linux-sunxi
From: Ziping Chen <techping.chan@gmail.com>
Allwinner A83T SoC has a low res adc like the one in Allwinner A10 SoC.
Now the driver has been modified to support it.
Add support for it.
Signed-off-by: Ziping Chen <techping.chan@gmail.com>
---
arch/arm/boot/dts/sun8i-a83t.dtsi | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/arch/arm/boot/dts/sun8i-a83t.dtsi b/arch/arm/boot/dts/sun8i-a83t.dtsi
index fcb7ef5ce2df..de1b77e49f06 100644
--- a/arch/arm/boot/dts/sun8i-a83t.dtsi
+++ b/arch/arm/boot/dts/sun8i-a83t.dtsi
@@ -1024,6 +1024,13 @@
status = "disabled";
};
+ r_lradc: lradc@1f03c00 {
+ compatible = "allwinner,sun8i-a83t-r-lradc";
+ reg = <0x01f03c00 0x100>;
+ interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
+ status = "disabled";
+ };
+
r_pio: pinctrl@1f02c00 {
compatible = "allwinner,sun8i-a83t-r-pinctrl";
reg = <0x01f02c00 0x400>;
--
2.21.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v4 4/4] ARM: dts: sun8i: tbs-a711: Add support for volume keys input
2019-03-27 0:24 [PATCH v4 0/4] Add support for lradc on A83T megous
` (2 preceding siblings ...)
2019-03-27 0:25 ` [PATCH v4 3/4] ARM: dts: sunxi: " megous
@ 2019-03-27 0:25 ` megous
2019-03-27 2:16 ` [PATCH v4 0/4] Add support for lradc on A83T Chen-Yu Tsai
4 siblings, 0 replies; 6+ messages in thread
From: megous @ 2019-03-27 0:25 UTC (permalink / raw)
To: maxime.ripard, wens, robh, mark.rutland
Cc: Ondrej Jirman, Ziping Chen, devicetree, linux-arm-kernel,
linux-kernel, linux-sunxi
From: Ondrej Jirman <megous@megous.com>
TBS A711 tablet has volume up/down keys connected to r_lradc. Add
support for these keys.
Signed-off-by: Ondrej Jirman <megous@megous.com>
---
arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts b/arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts
index 1e840ab5a541..6ecdc11b7059 100644
--- a/arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts
+++ b/arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts
@@ -46,6 +46,7 @@
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pwm/pwm.h>
+#include <dt-bindings/input/input.h>
/ {
model = "TBS A711 Tablet";
@@ -200,6 +201,25 @@
status = "okay";
};
+&r_lradc {
+ vref-supply = <®_aldo2>;
+ status = "okay";
+
+ button@210 {
+ label = "Volume Up";
+ linux,code = <KEY_VOLUMEUP>;
+ channel = <0>;
+ voltage = <210000>;
+ };
+
+ button@410 {
+ label = "Volume Down";
+ linux,code = <KEY_VOLUMEDOWN>;
+ channel = <0>;
+ voltage = <410000>;
+ };
+};
+
&r_rsb {
status = "okay";
--
2.21.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v4 0/4] Add support for lradc on A83T
2019-03-27 0:24 [PATCH v4 0/4] Add support for lradc on A83T megous
` (3 preceding siblings ...)
2019-03-27 0:25 ` [PATCH v4 4/4] ARM: dts: sun8i: tbs-a711: Add support for volume keys input megous
@ 2019-03-27 2:16 ` Chen-Yu Tsai
4 siblings, 0 replies; 6+ messages in thread
From: Chen-Yu Tsai @ 2019-03-27 2:16 UTC (permalink / raw)
To: Ondřej Jirman
Cc: Maxime Ripard, Rob Herring, Mark Rutland, Ziping Chen,
devicetree, linux-arm-kernel, linux-kernel, linux-sunxi
On Wed, Mar 27, 2019 at 8:25 AM <megous@megous.com> wrote:
>
> From: Ondrej Jirman <megous@megous.com>
>
> This series implements r_lradc (low res ADC) support for A83T.
>
> This is a continuation of v3 patch series from 2017 by Ziping Chen. I've
> rebased it on top of linux-next and changed the compatibe string as
> requested back then.[1]
>
> There was some talk of iio based lradc driver back then[2], but noone
> stepped forward to make it. Let's finish this series, so that it's
> at least possible to add support for tablet keys on various A83T tablets
> as that's the main use of lradc module.
>
> [1] https://lkml.org/lkml/2017/6/26/558
>
> [2] https://lkml.org/lkml/2017/6/27/877
>
> Please take a look, and apply the patches if you have no objections.
You need to send this series to the input subsystem maintainer, Dmitry
Torokhov, and CC the input mailing list. Otherwise the driver and binding
changes won't be picked up.
ChenYu
^ permalink raw reply [flat|nested] 6+ messages in thread