diff options
| author | Patrice Chotard <patrice.chotard@st.com> | 2016-08-10 03:39:06 -0400 |
|---|---|---|
| committer | Lee Jones <lee.jones@linaro.org> | 2016-08-10 04:23:25 -0400 |
| commit | 0f4be8cf637ea4637faba8a0e4bf2270287c6ba0 (patch) | |
| tree | fd3f170ae3a01ed96a60e5a16393ef8cffa9abeb | |
| parent | 29b4817d4018df78086157ea3a55c1d9424a7cfc (diff) | |
mfd: stmpe: Add STMPE_IDX_SYS_CTRL/2 enum
As STMPE1801/1601/24xx has a SYS_CTRL register and
STMPE1601/2403 has even a SYS_CTRL2 register, add
STMPE_IDX_SYS_CTRL/2 and update driver code accordingly
This update prepares the ground for not yet supported STMPE1600
which share similar REG_SYS_CTRL register.
Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
| -rw-r--r-- | drivers/mfd/stmpe.c | 21 | ||||
| -rw-r--r-- | drivers/mfd/stmpe.h | 2 | ||||
| -rw-r--r-- | include/linux/mfd/stmpe.h | 2 |
3 files changed, 18 insertions, 7 deletions
diff --git a/drivers/mfd/stmpe.c b/drivers/mfd/stmpe.c index 94c7cc02fdab..c053b2b67bad 100644 --- a/drivers/mfd/stmpe.c +++ b/drivers/mfd/stmpe.c | |||
| @@ -469,6 +469,8 @@ static const struct mfd_cell stmpe_ts_cell = { | |||
| 469 | 469 | ||
| 470 | static const u8 stmpe811_regs[] = { | 470 | static const u8 stmpe811_regs[] = { |
| 471 | [STMPE_IDX_CHIP_ID] = STMPE811_REG_CHIP_ID, | 471 | [STMPE_IDX_CHIP_ID] = STMPE811_REG_CHIP_ID, |
| 472 | [STMPE_IDX_SYS_CTRL] = STMPE811_REG_SYS_CTRL, | ||
| 473 | [STMPE_IDX_SYS_CTRL2] = STMPE811_REG_SYS_CTRL2, | ||
| 472 | [STMPE_IDX_ICR_LSB] = STMPE811_REG_INT_CTRL, | 474 | [STMPE_IDX_ICR_LSB] = STMPE811_REG_INT_CTRL, |
| 473 | [STMPE_IDX_IER_LSB] = STMPE811_REG_INT_EN, | 475 | [STMPE_IDX_IER_LSB] = STMPE811_REG_INT_EN, |
| 474 | [STMPE_IDX_ISR_MSB] = STMPE811_REG_INT_STA, | 476 | [STMPE_IDX_ISR_MSB] = STMPE811_REG_INT_STA, |
| @@ -511,7 +513,7 @@ static int stmpe811_enable(struct stmpe *stmpe, unsigned int blocks, | |||
| 511 | if (blocks & STMPE_BLOCK_TOUCHSCREEN) | 513 | if (blocks & STMPE_BLOCK_TOUCHSCREEN) |
| 512 | mask |= STMPE811_SYS_CTRL2_TSC_OFF; | 514 | mask |= STMPE811_SYS_CTRL2_TSC_OFF; |
| 513 | 515 | ||
| 514 | return __stmpe_set_bits(stmpe, STMPE811_REG_SYS_CTRL2, mask, | 516 | return __stmpe_set_bits(stmpe, stmpe->regs[STMPE_IDX_SYS_CTRL2], mask, |
| 515 | enable ? 0 : mask); | 517 | enable ? 0 : mask); |
| 516 | } | 518 | } |
| 517 | 519 | ||
| @@ -556,6 +558,8 @@ static struct stmpe_variant_info stmpe610 = { | |||
| 556 | 558 | ||
| 557 | static const u8 stmpe1601_regs[] = { | 559 | static const u8 stmpe1601_regs[] = { |
| 558 | [STMPE_IDX_CHIP_ID] = STMPE1601_REG_CHIP_ID, | 560 | [STMPE_IDX_CHIP_ID] = STMPE1601_REG_CHIP_ID, |
| 561 | [STMPE_IDX_SYS_CTRL] = STMPE1601_REG_SYS_CTRL, | ||
| 562 | [STMPE_IDX_SYS_CTRL2] = STMPE1601_REG_SYS_CTRL2, | ||
| 559 | [STMPE_IDX_ICR_LSB] = STMPE1601_REG_ICR_LSB, | 563 | [STMPE_IDX_ICR_LSB] = STMPE1601_REG_ICR_LSB, |
| 560 | [STMPE_IDX_IER_LSB] = STMPE1601_REG_IER_LSB, | 564 | [STMPE_IDX_IER_LSB] = STMPE1601_REG_IER_LSB, |
| 561 | [STMPE_IDX_ISR_MSB] = STMPE1601_REG_ISR_MSB, | 565 | [STMPE_IDX_ISR_MSB] = STMPE1601_REG_ISR_MSB, |
| @@ -640,13 +644,13 @@ static int stmpe1601_autosleep(struct stmpe *stmpe, | |||
| 640 | return timeout; | 644 | return timeout; |
| 641 | } | 645 | } |
| 642 | 646 | ||
| 643 | ret = __stmpe_set_bits(stmpe, STMPE1601_REG_SYS_CTRL2, | 647 | ret = __stmpe_set_bits(stmpe, stmpe->regs[STMPE_IDX_SYS_CTRL2], |
| 644 | STMPE1601_AUTOSLEEP_TIMEOUT_MASK, | 648 | STMPE1601_AUTOSLEEP_TIMEOUT_MASK, |
| 645 | timeout); | 649 | timeout); |
| 646 | if (ret < 0) | 650 | if (ret < 0) |
| 647 | return ret; | 651 | return ret; |
| 648 | 652 | ||
| 649 | return __stmpe_set_bits(stmpe, STMPE1601_REG_SYS_CTRL2, | 653 | return __stmpe_set_bits(stmpe, stmpe->regs[STMPE_IDX_SYS_CTRL2], |
| 650 | STPME1601_AUTOSLEEP_ENABLE, | 654 | STPME1601_AUTOSLEEP_ENABLE, |
| 651 | STPME1601_AUTOSLEEP_ENABLE); | 655 | STPME1601_AUTOSLEEP_ENABLE); |
| 652 | } | 656 | } |
| @@ -671,7 +675,7 @@ static int stmpe1601_enable(struct stmpe *stmpe, unsigned int blocks, | |||
| 671 | else | 675 | else |
| 672 | mask &= ~STMPE1601_SYS_CTRL_ENABLE_SPWM; | 676 | mask &= ~STMPE1601_SYS_CTRL_ENABLE_SPWM; |
| 673 | 677 | ||
| 674 | return __stmpe_set_bits(stmpe, STMPE1601_REG_SYS_CTRL, mask, | 678 | return __stmpe_set_bits(stmpe, stmpe->regs[STMPE_IDX_SYS_CTRL], mask, |
| 675 | enable ? mask : 0); | 679 | enable ? mask : 0); |
| 676 | } | 680 | } |
| 677 | 681 | ||
| @@ -710,6 +714,7 @@ static struct stmpe_variant_info stmpe1601 = { | |||
| 710 | */ | 714 | */ |
| 711 | static const u8 stmpe1801_regs[] = { | 715 | static const u8 stmpe1801_regs[] = { |
| 712 | [STMPE_IDX_CHIP_ID] = STMPE1801_REG_CHIP_ID, | 716 | [STMPE_IDX_CHIP_ID] = STMPE1801_REG_CHIP_ID, |
| 717 | [STMPE_IDX_SYS_CTRL] = STMPE1801_REG_SYS_CTRL, | ||
| 713 | [STMPE_IDX_ICR_LSB] = STMPE1801_REG_INT_CTRL_LOW, | 718 | [STMPE_IDX_ICR_LSB] = STMPE1801_REG_INT_CTRL_LOW, |
| 714 | [STMPE_IDX_IER_LSB] = STMPE1801_REG_INT_EN_MASK_LOW, | 719 | [STMPE_IDX_IER_LSB] = STMPE1801_REG_INT_EN_MASK_LOW, |
| 715 | [STMPE_IDX_ISR_LSB] = STMPE1801_REG_INT_STA_LOW, | 720 | [STMPE_IDX_ISR_LSB] = STMPE1801_REG_INT_STA_LOW, |
| @@ -756,14 +761,14 @@ static int stmpe1801_reset(struct stmpe *stmpe) | |||
| 756 | unsigned long timeout; | 761 | unsigned long timeout; |
| 757 | int ret = 0; | 762 | int ret = 0; |
| 758 | 763 | ||
| 759 | ret = __stmpe_set_bits(stmpe, STMPE1801_REG_SYS_CTRL, | 764 | ret = __stmpe_set_bits(stmpe, stmpe->regs[STMPE_IDX_SYS_CTRL], |
| 760 | STMPE1801_MSK_SYS_CTRL_RESET, STMPE1801_MSK_SYS_CTRL_RESET); | 765 | STMPE1801_MSK_SYS_CTRL_RESET, STMPE1801_MSK_SYS_CTRL_RESET); |
| 761 | if (ret < 0) | 766 | if (ret < 0) |
| 762 | return ret; | 767 | return ret; |
| 763 | 768 | ||
| 764 | timeout = jiffies + msecs_to_jiffies(100); | 769 | timeout = jiffies + msecs_to_jiffies(100); |
| 765 | while (time_before(jiffies, timeout)) { | 770 | while (time_before(jiffies, timeout)) { |
| 766 | ret = __stmpe_reg_read(stmpe, STMPE1801_REG_SYS_CTRL); | 771 | ret = __stmpe_reg_read(stmpe, stmpe->regs[STMPE_IDX_SYS_CTRL]); |
| 767 | if (ret < 0) | 772 | if (ret < 0) |
| 768 | return ret; | 773 | return ret; |
| 769 | if (!(ret & STMPE1801_MSK_SYS_CTRL_RESET)) | 774 | if (!(ret & STMPE1801_MSK_SYS_CTRL_RESET)) |
| @@ -794,6 +799,8 @@ static struct stmpe_variant_info stmpe1801 = { | |||
| 794 | 799 | ||
| 795 | static const u8 stmpe24xx_regs[] = { | 800 | static const u8 stmpe24xx_regs[] = { |
| 796 | [STMPE_IDX_CHIP_ID] = STMPE24XX_REG_CHIP_ID, | 801 | [STMPE_IDX_CHIP_ID] = STMPE24XX_REG_CHIP_ID, |
| 802 | [STMPE_IDX_SYS_CTRL] = STMPE24XX_REG_SYS_CTRL, | ||
| 803 | [STMPE_IDX_SYS_CTRL2] = STMPE24XX_REG_SYS_CTRL2, | ||
| 797 | [STMPE_IDX_ICR_LSB] = STMPE24XX_REG_ICR_LSB, | 804 | [STMPE_IDX_ICR_LSB] = STMPE24XX_REG_ICR_LSB, |
| 798 | [STMPE_IDX_IER_LSB] = STMPE24XX_REG_IER_LSB, | 805 | [STMPE_IDX_IER_LSB] = STMPE24XX_REG_IER_LSB, |
| 799 | [STMPE_IDX_ISR_MSB] = STMPE24XX_REG_ISR_MSB, | 806 | [STMPE_IDX_ISR_MSB] = STMPE24XX_REG_ISR_MSB, |
| @@ -840,7 +847,7 @@ static int stmpe24xx_enable(struct stmpe *stmpe, unsigned int blocks, | |||
| 840 | if (blocks & STMPE_BLOCK_KEYPAD) | 847 | if (blocks & STMPE_BLOCK_KEYPAD) |
| 841 | mask |= STMPE24XX_SYS_CTRL_ENABLE_KPC; | 848 | mask |= STMPE24XX_SYS_CTRL_ENABLE_KPC; |
| 842 | 849 | ||
| 843 | return __stmpe_set_bits(stmpe, STMPE24XX_REG_SYS_CTRL, mask, | 850 | return __stmpe_set_bits(stmpe, stmpe->regs[STMPE_IDX_SYS_CTRL], mask, |
| 844 | enable ? mask : 0); | 851 | enable ? mask : 0); |
| 845 | } | 852 | } |
| 846 | 853 | ||
diff --git a/drivers/mfd/stmpe.h b/drivers/mfd/stmpe.h index 84adb46b3e2f..406f9f2d8935 100644 --- a/drivers/mfd/stmpe.h +++ b/drivers/mfd/stmpe.h | |||
| @@ -138,6 +138,7 @@ int stmpe_remove(struct stmpe *stmpe); | |||
| 138 | #define STMPE811_NR_INTERNAL_IRQS 8 | 138 | #define STMPE811_NR_INTERNAL_IRQS 8 |
| 139 | 139 | ||
| 140 | #define STMPE811_REG_CHIP_ID 0x00 | 140 | #define STMPE811_REG_CHIP_ID 0x00 |
| 141 | #define STMPE811_REG_SYS_CTRL 0x03 | ||
| 141 | #define STMPE811_REG_SYS_CTRL2 0x04 | 142 | #define STMPE811_REG_SYS_CTRL2 0x04 |
| 142 | #define STMPE811_REG_SPI_CFG 0x08 | 143 | #define STMPE811_REG_SPI_CFG 0x08 |
| 143 | #define STMPE811_REG_INT_CTRL 0x09 | 144 | #define STMPE811_REG_INT_CTRL 0x09 |
| @@ -264,6 +265,7 @@ int stmpe_remove(struct stmpe *stmpe); | |||
| 264 | #define STMPE24XX_NR_INTERNAL_IRQS 9 | 265 | #define STMPE24XX_NR_INTERNAL_IRQS 9 |
| 265 | 266 | ||
| 266 | #define STMPE24XX_REG_SYS_CTRL 0x02 | 267 | #define STMPE24XX_REG_SYS_CTRL 0x02 |
| 268 | #define STMPE24XX_REG_SYS_CTRL2 0x03 | ||
| 267 | #define STMPE24XX_REG_ICR_LSB 0x11 | 269 | #define STMPE24XX_REG_ICR_LSB 0x11 |
| 268 | #define STMPE24XX_REG_IER_LSB 0x13 | 270 | #define STMPE24XX_REG_IER_LSB 0x13 |
| 269 | #define STMPE24XX_REG_ISR_MSB 0x14 | 271 | #define STMPE24XX_REG_ISR_MSB 0x14 |
diff --git a/include/linux/mfd/stmpe.h b/include/linux/mfd/stmpe.h index de748bc7525e..eb8b73bd139f 100644 --- a/include/linux/mfd/stmpe.h +++ b/include/linux/mfd/stmpe.h | |||
| @@ -39,6 +39,8 @@ enum stmpe_partnum { | |||
| 39 | */ | 39 | */ |
| 40 | enum { | 40 | enum { |
| 41 | STMPE_IDX_CHIP_ID, | 41 | STMPE_IDX_CHIP_ID, |
| 42 | STMPE_IDX_SYS_CTRL, | ||
| 43 | STMPE_IDX_SYS_CTRL2, | ||
| 42 | STMPE_IDX_ICR_LSB, | 44 | STMPE_IDX_ICR_LSB, |
| 43 | STMPE_IDX_IER_LSB, | 45 | STMPE_IDX_IER_LSB, |
| 44 | STMPE_IDX_ISR_LSB, | 46 | STMPE_IDX_ISR_LSB, |
