diff options
author | Krzysztof Kozlowski <k.kozlowski@samsung.com> | 2015-12-29 23:47:26 -0500 |
---|---|---|
committer | Alexandre Belloni <alexandre.belloni@free-electrons.com> | 2016-01-11 14:21:45 -0500 |
commit | 67a6025a77be7c6bcb4baeb9424509fcb4ca1e32 (patch) | |
tree | e3071dfc204f422ddecdda083c3aaeb097566fc2 | |
parent | a83a793ad433d24f67aba4d88169235379004235 (diff) |
rtc: s5m: Add separate field for storing auto-cleared mask in register config
Some devices from S2M/S5M family use different register update masks for
different operations (alarm and register update). Now the driver uses
common register configuration and a lot of exceptions per device in code.
Before eliminating the exceptions and using specific register
configuration for given device, make the auto-cleared mask a separate
field. This is merely a refactoring.
Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com>
Tested-by: Alim Akhtar <alim.akhtar@samsung.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
-rw-r--r-- | drivers/rtc/rtc-s5m.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/rtc/rtc-s5m.c b/drivers/rtc/rtc-s5m.c index 85649861a6b0..559db8f72117 100644 --- a/drivers/rtc/rtc-s5m.c +++ b/drivers/rtc/rtc-s5m.c | |||
@@ -56,6 +56,8 @@ struct s5m_rtc_reg_config { | |||
56 | * auto-cleared after successful update. | 56 | * auto-cleared after successful update. |
57 | */ | 57 | */ |
58 | unsigned int udr_update; | 58 | unsigned int udr_update; |
59 | /* Auto-cleared mask in UDR field for writing time and alarm */ | ||
60 | unsigned int autoclear_udr_mask; | ||
59 | /* Mask for UDR field in 'udr_update' register */ | 61 | /* Mask for UDR field in 'udr_update' register */ |
60 | unsigned int udr_mask; | 62 | unsigned int udr_mask; |
61 | }; | 63 | }; |
@@ -68,6 +70,7 @@ static const struct s5m_rtc_reg_config s5m_rtc_regs = { | |||
68 | .alarm0 = S5M_ALARM0_SEC, | 70 | .alarm0 = S5M_ALARM0_SEC, |
69 | .alarm1 = S5M_ALARM1_SEC, | 71 | .alarm1 = S5M_ALARM1_SEC, |
70 | .udr_update = S5M_RTC_UDR_CON, | 72 | .udr_update = S5M_RTC_UDR_CON, |
73 | .autoclear_udr_mask = S5M_RTC_UDR_MASK, | ||
71 | .udr_mask = S5M_RTC_UDR_MASK, | 74 | .udr_mask = S5M_RTC_UDR_MASK, |
72 | }; | 75 | }; |
73 | 76 | ||
@@ -82,6 +85,7 @@ static const struct s5m_rtc_reg_config s2mps_rtc_regs = { | |||
82 | .alarm0 = S2MPS_ALARM0_SEC, | 85 | .alarm0 = S2MPS_ALARM0_SEC, |
83 | .alarm1 = S2MPS_ALARM1_SEC, | 86 | .alarm1 = S2MPS_ALARM1_SEC, |
84 | .udr_update = S2MPS_RTC_UDR_CON, | 87 | .udr_update = S2MPS_RTC_UDR_CON, |
88 | .autoclear_udr_mask = S2MPS_RTC_WUDR_MASK, | ||
85 | .udr_mask = S2MPS_RTC_WUDR_MASK, | 89 | .udr_mask = S2MPS_RTC_WUDR_MASK, |
86 | }; | 90 | }; |
87 | 91 | ||
@@ -167,7 +171,7 @@ static inline int s5m8767_wait_for_udr_update(struct s5m_rtc_info *info) | |||
167 | 171 | ||
168 | do { | 172 | do { |
169 | ret = regmap_read(info->regmap, info->regs->udr_update, &data); | 173 | ret = regmap_read(info->regmap, info->regs->udr_update, &data); |
170 | } while (--retry && (data & info->regs->udr_mask) && !ret); | 174 | } while (--retry && (data & info->regs->autoclear_udr_mask) && !ret); |
171 | 175 | ||
172 | if (!retry) | 176 | if (!retry) |
173 | dev_err(info->dev, "waiting for UDR update, reached max number of retries\n"); | 177 | dev_err(info->dev, "waiting for UDR update, reached max number of retries\n"); |