|
@@ -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;
|
|
|
|