diff options
author | Wolfram Sang <wsa@the-dreams.de> | 2015-01-07 06:24:10 -0500 |
---|---|---|
committer | Wolfram Sang <wsa@the-dreams.de> | 2015-03-13 10:10:58 -0400 |
commit | fb3de30cd9c7e90c3e58cfe51b02c768b291873b (patch) | |
tree | 604d510f57293aaa928b8f44950401414adbe887 | |
parent | f2325c54f362ffa1e2e3254bcb70d6d4da49a17a (diff) |
i2c: pmcmsp: make use of the new infrastructure for quirks
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
-rw-r--r-- | drivers/i2c/busses/i2c-pmcmsp.c | 42 |
1 files changed, 16 insertions, 26 deletions
diff --git a/drivers/i2c/busses/i2c-pmcmsp.c b/drivers/i2c/busses/i2c-pmcmsp.c index d37d9db6681e..2c40edbf6224 100644 --- a/drivers/i2c/busses/i2c-pmcmsp.c +++ b/drivers/i2c/busses/i2c-pmcmsp.c | |||
@@ -456,14 +456,6 @@ static enum pmcmsptwi_xfer_result pmcmsptwi_xfer_cmd( | |||
456 | return -EINVAL; | 456 | return -EINVAL; |
457 | } | 457 | } |
458 | 458 | ||
459 | if (cmd->read_len > MSP_MAX_BYTES_PER_RW || | ||
460 | cmd->write_len > MSP_MAX_BYTES_PER_RW) { | ||
461 | dev_err(&pmcmsptwi_adapter.dev, | ||
462 | "%s: Cannot transfer more than %d bytes\n", | ||
463 | __func__, MSP_MAX_BYTES_PER_RW); | ||
464 | return -EINVAL; | ||
465 | } | ||
466 | |||
467 | mutex_lock(&data->lock); | 459 | mutex_lock(&data->lock); |
468 | dev_dbg(&pmcmsptwi_adapter.dev, | 460 | dev_dbg(&pmcmsptwi_adapter.dev, |
469 | "Setting address to 0x%04x\n", cmd->addr); | 461 | "Setting address to 0x%04x\n", cmd->addr); |
@@ -520,25 +512,14 @@ static int pmcmsptwi_master_xfer(struct i2c_adapter *adap, | |||
520 | struct pmcmsptwi_cfg oldcfg, newcfg; | 512 | struct pmcmsptwi_cfg oldcfg, newcfg; |
521 | int ret; | 513 | int ret; |
522 | 514 | ||
523 | if (num > 2) { | 515 | if (num == 2) { |
524 | dev_dbg(&adap->dev, "%d messages unsupported\n", num); | ||
525 | return -EINVAL; | ||
526 | } else if (num == 2) { | ||
527 | /* Check for a dual write-then-read command */ | ||
528 | struct i2c_msg *nextmsg = msg + 1; | 516 | struct i2c_msg *nextmsg = msg + 1; |
529 | if (!(msg->flags & I2C_M_RD) && | 517 | |
530 | (nextmsg->flags & I2C_M_RD) && | 518 | cmd.type = MSP_TWI_CMD_WRITE_READ; |
531 | msg->addr == nextmsg->addr) { | 519 | cmd.write_len = msg->len; |
532 | cmd.type = MSP_TWI_CMD_WRITE_READ; | 520 | cmd.write_data = msg->buf; |
533 | cmd.write_len = msg->len; | 521 | cmd.read_len = nextmsg->len; |
534 | cmd.write_data = msg->buf; | 522 | cmd.read_data = nextmsg->buf; |
535 | cmd.read_len = nextmsg->len; | ||
536 | cmd.read_data = nextmsg->buf; | ||
537 | } else { | ||
538 | dev_dbg(&adap->dev, | ||
539 | "Non write-read dual messages unsupported\n"); | ||
540 | return -EINVAL; | ||
541 | } | ||
542 | } else if (msg->flags & I2C_M_RD) { | 523 | } else if (msg->flags & I2C_M_RD) { |
543 | cmd.type = MSP_TWI_CMD_READ; | 524 | cmd.type = MSP_TWI_CMD_READ; |
544 | cmd.read_len = msg->len; | 525 | cmd.read_len = msg->len; |
@@ -598,6 +579,14 @@ static u32 pmcmsptwi_i2c_func(struct i2c_adapter *adapter) | |||
598 | I2C_FUNC_SMBUS_WORD_DATA | I2C_FUNC_SMBUS_PROC_CALL; | 579 | I2C_FUNC_SMBUS_WORD_DATA | I2C_FUNC_SMBUS_PROC_CALL; |
599 | } | 580 | } |
600 | 581 | ||
582 | static struct i2c_adapter_quirks pmcmsptwi_i2c_quirks = { | ||
583 | .flags = I2C_AQ_COMB_WRITE_THEN_READ, | ||
584 | .max_write_len = MSP_MAX_BYTES_PER_RW, | ||
585 | .max_read_len = MSP_MAX_BYTES_PER_RW, | ||
586 | .max_comb_1st_msg_len = MSP_MAX_BYTES_PER_RW, | ||
587 | .max_comb_2nd_msg_len = MSP_MAX_BYTES_PER_RW, | ||
588 | }; | ||
589 | |||
601 | /* -- Initialization -- */ | 590 | /* -- Initialization -- */ |
602 | 591 | ||
603 | static struct i2c_algorithm pmcmsptwi_algo = { | 592 | static struct i2c_algorithm pmcmsptwi_algo = { |
@@ -609,6 +598,7 @@ static struct i2c_adapter pmcmsptwi_adapter = { | |||
609 | .owner = THIS_MODULE, | 598 | .owner = THIS_MODULE, |
610 | .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, | 599 | .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, |
611 | .algo = &pmcmsptwi_algo, | 600 | .algo = &pmcmsptwi_algo, |
601 | .quirks = &pmcmsptwi_i2c_quirks, | ||
612 | .name = DRV_NAME, | 602 | .name = DRV_NAME, |
613 | }; | 603 | }; |
614 | 604 | ||