Input: tca6416-keypad - add support for tca6408a
Support 8-bit tca6408a I/O expander as a keypad. Signed-off-by: Tony SIM <chinyeow.sim.xt@renesas.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:

committed by
Dmitry Torokhov

parent
da0c490115
commit
b8a3d6bcbc
@@ -29,6 +29,7 @@
|
||||
|
||||
static const struct i2c_device_id tca6416_id[] = {
|
||||
{ "tca6416-keys", 16, },
|
||||
{ "tca6408-keys", 8, },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, tca6416_id);
|
||||
@@ -46,8 +47,9 @@ struct tca6416_keypad_chip {
|
||||
struct i2c_client *client;
|
||||
struct input_dev *input;
|
||||
struct delayed_work dwork;
|
||||
u16 pinmask;
|
||||
int io_size;
|
||||
int irqnum;
|
||||
u16 pinmask;
|
||||
bool use_polling;
|
||||
struct tca6416_button buttons[0];
|
||||
};
|
||||
@@ -56,7 +58,9 @@ static int tca6416_write_reg(struct tca6416_keypad_chip *chip, int reg, u16 val)
|
||||
{
|
||||
int error;
|
||||
|
||||
error = i2c_smbus_write_word_data(chip->client, reg << 1, val);
|
||||
error = chip->io_size > 8 ?
|
||||
i2c_smbus_write_word_data(chip->client, reg << 1, val) :
|
||||
i2c_smbus_write_byte_data(chip->client, reg, val);
|
||||
if (error < 0) {
|
||||
dev_err(&chip->client->dev,
|
||||
"%s failed, reg: %d, val: %d, error: %d\n",
|
||||
@@ -71,7 +75,9 @@ static int tca6416_read_reg(struct tca6416_keypad_chip *chip, int reg, u16 *val)
|
||||
{
|
||||
int retval;
|
||||
|
||||
retval = i2c_smbus_read_word_data(chip->client, reg << 1);
|
||||
retval = chip->io_size > 8 ?
|
||||
i2c_smbus_read_word_data(chip->client, reg << 1) :
|
||||
i2c_smbus_read_byte_data(chip->client, reg);
|
||||
if (retval < 0) {
|
||||
dev_err(&chip->client->dev, "%s failed, reg: %d, error: %d\n",
|
||||
__func__, reg, retval);
|
||||
@@ -224,6 +230,7 @@ static int __devinit tca6416_keypad_probe(struct i2c_client *client,
|
||||
|
||||
chip->client = client;
|
||||
chip->input = input;
|
||||
chip->io_size = id->driver_data;
|
||||
chip->pinmask = pdata->pinmask;
|
||||
chip->use_polling = pdata->use_polling;
|
||||
|
||||
|
Reference in New Issue
Block a user