
From: Thomas Diener dietho@gmx.de
Signed-off-by: Thomas Diener dietho@gmx.de --- drivers/input/Makefile | 3 +- drivers/input/fma1125.c | 47 ++++++++++++++++ include/fma1125.h | 140 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 189 insertions(+), 1 deletion(-) create mode 100644 drivers/input/fma1125.c create mode 100644 include/fma1125.h
diff --git a/drivers/input/Makefile b/drivers/input/Makefile index 65c40ba..203a311 100644 --- a/drivers/input/Makefile +++ b/drivers/input/Makefile @@ -14,4 +14,5 @@ obj-$(CONFIG_PS2MULT) += ps2mult.o ps2ser.o endif obj-y += input.o obj-$(CONFIG_OF_CONTROL) += key_matrix.o -obj-$(CONFIG_POLYTOUCH) += polytouch.o \ No newline at end of file +obj-$(CONFIG_POLYTOUCH) += polytouch.o +obj-$(CONFIG_FMA1125) += fma1125.o \ No newline at end of file diff --git a/drivers/input/fma1125.c b/drivers/input/fma1125.c new file mode 100644 index 0000000..8241371 --- /dev/null +++ b/drivers/input/fma1125.c @@ -0,0 +1,47 @@ +/* + * (c) 2012 Graf-Syteco, Matthias Weisser + * weisserm@arcor.de + * + * fma1125.c - FUJITSU FMA1125 Touch Sensor Controller + * + * SPDX-License-Identifier: GPL-2.0+ + * + */ + +#include <common.h> +#include <fma1125.h> +#include <i2c.h> + +int fma1125_init(int id, const struct fma1125_register_tbl *lu, uint16_t num) +{ + const struct fma1125_register_tbl *p; + int res = 0; + + if (NULL == lu) + return res; + + if (!i2c_probe(FMA1125_SA)) { + int i; + + p = lu; + + for (i = 0; i < num; i++) { + i2c_reg_write(id, p->addr, p->value); + p++; + } + + res = 1; + } + return res; +} + +int fma1125_get_touch_bits(void) +{ + uint8_t res = i2c_reg_read(FMA1125_SA, FMA1125_PA_TOUCH_BYTE); + return res; +} + +void fma1125_set_gpio_out(uint8_t value) +{ + i2c_reg_write(FMA1125_SA, FMA1125_GPIO_DATA_OUT, value); +} diff --git a/include/fma1125.h b/include/fma1125.h new file mode 100644 index 0000000..322cff5 --- /dev/null +++ b/include/fma1125.h @@ -0,0 +1,140 @@ +/* + * (c) 2012 Graf-Syteco, Matthias Weisser + * weisserm@arcor.de + * + * fma1125.h - FUJITSU FMA1125 Touch Sensor Controller + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef __FMA1125_H +#define __FMA1125_H + + +#define FMA1125_SA 0x68 + +#define FMA1125_PA0_ALPHA 0x00 +#define FMA1125_PA1_ALPHA 0x01 +#define FMA1125_PA2_ALPHA 0x02 +#define FMA1125_PA3_ALPHA 0x03 +#define FMA1125_PA4_ALPHA 0x04 +#define FMA1125_PA5_ALPHA 0x05 +#define FMA1125_PA6_ALPHA 0x06 +#define FMA1125_PA7_ALPHA 0x07 +#define FMA1125_REFERENCE_DELAY 0x08 +#define FMA1125_BETA 0x09 +#define FMA1125_AIC_WAIT_TIME 0x0A +#define FMA1125_PA0_STRENGTH_THRESHOLD 0x0B +#define FMA1125_PA1_STRENGTH_THRESHOLD 0x0C +#define FMA1125_PA2_STRENGTH_THRESHOLD 0x0D +#define FMA1125_PA3_STRENGTH_THRESHOLD 0x0E +#define FMA1125_PA4_STRENGTH_THRESHOLD 0x0F +#define FMA1125_PA5_STRENGTH_THRESHOLD 0x10 +#define FMA1125_PA6_STRENGTH_THRESHOLD 0x11 +#define FMA1125_PA7_STRENGTH_THRESHOLD 0x12 +#define FMA1125_FEATURE_SELECT 0x13 +#define FMA1125_INTEGRATION_TIME 0x14 +#define FMA1125_IDLE_STATE_ENTER_TIME 0x15 +#define FMA1125_CONTROL_1 0x16 +#define FMA1125_CONTROL_2 0x17 +#define FMA1125_PA_DATA_OUT 0x18 +#define FMA1125_GPIO_DATA_OUT 0x19 +#define FMA1125_PA_DIRECTION 0x1A +#define FMA1125_GPIO_DIRECTION 0x1B +#define FMA1125_PA_CONFIGURATION 0x1C +#define FMA1125_GPIO_CONFIGURATION 0x1D +#define FMA1125_CALIBRATION_INTERVAL 0x1E +#define FMA1125_GINT_INTERRUPT_MASK 0x1F +#define FMA1125_GINT_INTERRUPT_CLEAR 0x20 +#define FMA1125_PA_EINT_ENABLE 0x21 +#define FMA1125_GPIO_EINT_ENABLE 0x22 +#define FMA1125_FILTER_PERIOD 0x23 +#define FMA1125_FILTER_THRESHOLD 0x24 +#define FMA1125_CONTROL_3 0x25 +#define FMA1125_GINT_INTERRUPT_EDGE_EN 0x26 +#define FMA1125_GPIO_INPUT_BOUNCE_PERIOD 0x27 +#define FMA1125_REGISTER_CHECK 0x28 +#define FMA1125_PA03_RESISTOR_SELECT 0x29 +#define FMA1125_PA47_RESISTOR_SELECT 0x2A +#define FMA1125_REFERENCE_RESISTOR_SELECT 0x2B +#define FMA1125_BETA_DISABLE 0x2C +#define FMA1125_GPIO01_DIM_UNIT_PERIOD 0x2D +#define FMA1125_GPIO23_DIM_UNIT_PERIOD 0x2E +#define FMA1125_PA01_DIM_UNIT_PERIOD 0x2F +#define FMA1125_PA23_DIM_UNIT_PERIOD 0x30 +#define FMA1125_GPIO0_DIMMING_CONTROL 0x31 +#define FMA1125_GPIO1_DIMMING_CONTROL 0x32 +#define FMA1125_GPIO2_DIMMING_CONTROL 0x33 +#define FMA1125_GPIO3_DIMMING_CONTROL 0x34 +#define FMA1125_PA0_DIMMING_CONTROL 0x35 +#define FMA1125_PA1_DIMMING_CONTROL 0x36 +#define FMA1125_PA2_DIMMING_CONTROL 0x37 +#define FMA1125_PA3_DIMMING_CONTROL 0x38 +#define FMA1125_GPIO03_DIMMING_MODE 0x39 +#define FMA1125_PA03_DIMMING_MODE 0x3A +#define FMA1125_DIMMING_START 0x3B +#define FMA1125_DIMMING_ENABLE 0x3C +#define FMA1125_PA0_STRENGTH 0x50 +#define FMA1125_PA1_STRENGTH 0x51 +#define FMA1125_PA2_STRENGTH 0x52 +#define FMA1125_PA3_STRENGTH 0x53 +#define FMA1125_PA4_STRENGTH 0x54 +#define FMA1125_PA5_STRENGTH 0x55 +#define FMA1125_PA6_STRENGTH 0x56 +#define FMA1125_PA7_STRENGTH 0x57 +#define FMA1125_PA0_IMPEDANCE 0x58 +#define FMA1125_PA1_IMPEDANCE 0x59 +#define FMA1125_PA2_IMPEDANCE 0x5A +#define FMA1125_PA3_IMPEDANCE 0x5B +#define FMA1125_PA4_IMPEDANCE 0x5C +#define FMA1125_PA5_IMPEDANCE 0x5D +#define FMA1125_PA6_IMPEDANCE 0x5E +#define FMA1125_PA7_IMPEDANCE 0x5F +#define FMA1125_PA0_REF_IMPEDANCE 0x60 +#define FMA1125_PA1_REF_IMPEDANCE 0x61 +#define FMA1125_PA2_REF_IMPEDANCE 0x62 +#define FMA1125_PA3_REF_IMPEDANCE 0x63 +#define FMA1125_PA4_REF_IMPEDANCE 0x64 +#define FMA1125_PA5_REF_IMPEDANCE 0x65 +#define FMA1125_PA6_REF_IMPEDANCE 0x66 +#define FMA1125_PA7_REF_IMPEDANCE 0x67 +#define FMA1125_PA_TOUCH_BYTE 0x68 +#define FMA1125_GINT_INTERRUPT_PENDING 0x69 +#define FMA1125_PA_INPUT_DATA 0x6A +#define FMA1125_GPIO_INPUT_DATA 0x6B +#define FMA1125_PA_INPUT_BCU_DATA 0x6C +#define FMA1125_GPIO_INPUT_BCU_DATA 0x6D +#define FMA1125_PA_INPUT_FIFO_DATA 0x6E +#define FMA1125_GPIO_INPUT_FIFO_DATA 0x6F +#define FMA1125_CLK_EXTERNAL 0xF7 +#define FMA1125_CLK_INTERNAL 0xF8 +#define FMA1125_BIAS_OFF 0xF9 +#define FMA1125_BIAS_ON 0xFA +#define FMA1125_LTB_ENABLE 0xFB +#define FMA1125_WAKEUP_SLEEP 0xFC +#define FMA1125_ENTER_SLEEP 0xFD +#define FMA1125_COLD_RESET 0xFE +#define FMA1125_WARM_RESET 0xFF + + +#define FMA1125_PA7_R_SEL(x) (((x) & 0x3) << 6) +#define FMA1125_PA6_R_SEL(x) (((x) & 0x3) << 4) +#define FMA1125_PA5_R_SEL(x) (((x) & 0x3) << 2) +#define FMA1125_PA4_R_SEL(x) (((x) & 0x3) << 0) + +#define FMA1125_PA3_R_SEL(x) (((x) & 0x3) << 6) +#define FMA1125_PA2_R_SEL(x) (((x) & 0x3) << 4) +#define FMA1125_PA1_R_SEL(x) (((x) & 0x3) << 2) +#define FMA1125_PA0_R_SEL(x) (((x) & 0x3) << 0) + + +struct fma1125_register_tbl { + uint8_t addr; + uint8_t value; +}; + +int fma1125_init(int id, const struct fma1125_register_tbl *lu, uint16_t num); +int fma1125_get_touch_bits(void); +void fma1125_set_gpio_out(uint8_t value); + +#endif