Skip to content

Commit 2e830cc

Browse files
srealexandrebelloni
authored andcommitted
rtc: rk808: reduce 'struct rk808' usage
Reduce usage of 'struct rk808' (driver data of the parent MFD), so that only the chip variant field is still being accessed directly. This allows restructuring the MFD driver to support SPI based PMICs. Acked-by: Alexandre Belloni <[email protected]> Signed-off-by: Sebastian Reichel <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Alexandre Belloni <[email protected]>
1 parent 21b8a1d commit 2e830cc

File tree

1 file changed

+20
-27
lines changed

1 file changed

+20
-27
lines changed

drivers/rtc/rtc-rk808.c

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
#include <linux/bcd.h>
1515
#include <linux/mfd/rk808.h>
1616
#include <linux/platform_device.h>
17-
#include <linux/i2c.h>
1817

1918
/* RTC_CTRL_REG bitfields */
2019
#define BIT_RTC_CTRL_REG_STOP_RTC_M BIT(0)
@@ -51,7 +50,7 @@ struct rk_rtc_compat_reg {
5150
};
5251

5352
struct rk808_rtc {
54-
struct rk808 *rk808;
53+
struct regmap *regmap;
5554
struct rtc_device *rtc;
5655
struct rk_rtc_compat_reg *creg;
5756
int irq;
@@ -97,12 +96,11 @@ static void gregorian_to_rockchip(struct rtc_time *tm)
9796
static int rk808_rtc_readtime(struct device *dev, struct rtc_time *tm)
9897
{
9998
struct rk808_rtc *rk808_rtc = dev_get_drvdata(dev);
100-
struct rk808 *rk808 = rk808_rtc->rk808;
10199
u8 rtc_data[NUM_TIME_REGS];
102100
int ret;
103101

104102
/* Force an update of the shadowed registers right now */
105-
ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->ctrl_reg,
103+
ret = regmap_update_bits(rk808_rtc->regmap, rk808_rtc->creg->ctrl_reg,
106104
BIT_RTC_CTRL_REG_RTC_GET_TIME,
107105
BIT_RTC_CTRL_REG_RTC_GET_TIME);
108106
if (ret) {
@@ -116,15 +114,15 @@ static int rk808_rtc_readtime(struct device *dev, struct rtc_time *tm)
116114
* 32khz. If we clear the GET_TIME bit here, the time of i2c transfer
117115
* certainly more than 31.25us: 16 * 2.5us at 400kHz bus frequency.
118116
*/
119-
ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->ctrl_reg,
117+
ret = regmap_update_bits(rk808_rtc->regmap, rk808_rtc->creg->ctrl_reg,
120118
BIT_RTC_CTRL_REG_RTC_GET_TIME,
121119
0);
122120
if (ret) {
123121
dev_err(dev, "Failed to update bits rtc_ctrl: %d\n", ret);
124122
return ret;
125123
}
126124

127-
ret = regmap_bulk_read(rk808->regmap, rk808_rtc->creg->seconds_reg,
125+
ret = regmap_bulk_read(rk808_rtc->regmap, rk808_rtc->creg->seconds_reg,
128126
rtc_data, NUM_TIME_REGS);
129127
if (ret) {
130128
dev_err(dev, "Failed to bulk read rtc_data: %d\n", ret);
@@ -148,7 +146,6 @@ static int rk808_rtc_readtime(struct device *dev, struct rtc_time *tm)
148146
static int rk808_rtc_set_time(struct device *dev, struct rtc_time *tm)
149147
{
150148
struct rk808_rtc *rk808_rtc = dev_get_drvdata(dev);
151-
struct rk808 *rk808 = rk808_rtc->rk808;
152149
u8 rtc_data[NUM_TIME_REGS];
153150
int ret;
154151

@@ -163,22 +160,22 @@ static int rk808_rtc_set_time(struct device *dev, struct rtc_time *tm)
163160
rtc_data[6] = bin2bcd(tm->tm_wday);
164161

165162
/* Stop RTC while updating the RTC registers */
166-
ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->ctrl_reg,
163+
ret = regmap_update_bits(rk808_rtc->regmap, rk808_rtc->creg->ctrl_reg,
167164
BIT_RTC_CTRL_REG_STOP_RTC_M,
168165
BIT_RTC_CTRL_REG_STOP_RTC_M);
169166
if (ret) {
170167
dev_err(dev, "Failed to update RTC control: %d\n", ret);
171168
return ret;
172169
}
173170

174-
ret = regmap_bulk_write(rk808->regmap, rk808_rtc->creg->seconds_reg,
171+
ret = regmap_bulk_write(rk808_rtc->regmap, rk808_rtc->creg->seconds_reg,
175172
rtc_data, NUM_TIME_REGS);
176173
if (ret) {
177174
dev_err(dev, "Failed to bull write rtc_data: %d\n", ret);
178175
return ret;
179176
}
180177
/* Start RTC again */
181-
ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->ctrl_reg,
178+
ret = regmap_update_bits(rk808_rtc->regmap, rk808_rtc->creg->ctrl_reg,
182179
BIT_RTC_CTRL_REG_STOP_RTC_M, 0);
183180
if (ret) {
184181
dev_err(dev, "Failed to update RTC control: %d\n", ret);
@@ -191,12 +188,11 @@ static int rk808_rtc_set_time(struct device *dev, struct rtc_time *tm)
191188
static int rk808_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)
192189
{
193190
struct rk808_rtc *rk808_rtc = dev_get_drvdata(dev);
194-
struct rk808 *rk808 = rk808_rtc->rk808;
195191
u8 alrm_data[NUM_ALARM_REGS];
196192
uint32_t int_reg;
197193
int ret;
198194

199-
ret = regmap_bulk_read(rk808->regmap,
195+
ret = regmap_bulk_read(rk808_rtc->regmap,
200196
rk808_rtc->creg->alarm_seconds_reg,
201197
alrm_data, NUM_ALARM_REGS);
202198
if (ret) {
@@ -212,7 +208,7 @@ static int rk808_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)
212208
alrm->time.tm_year = (bcd2bin(alrm_data[5] & YEARS_REG_MSK)) + 100;
213209
rockchip_to_gregorian(&alrm->time);
214210

215-
ret = regmap_read(rk808->regmap, rk808_rtc->creg->int_reg, &int_reg);
211+
ret = regmap_read(rk808_rtc->regmap, rk808_rtc->creg->int_reg, &int_reg);
216212
if (ret) {
217213
dev_err(dev, "Failed to read RTC INT REG: %d\n", ret);
218214
return ret;
@@ -228,21 +224,19 @@ static int rk808_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)
228224

229225
static int rk808_rtc_stop_alarm(struct rk808_rtc *rk808_rtc)
230226
{
231-
struct rk808 *rk808 = rk808_rtc->rk808;
232227
int ret;
233228

234-
ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->int_reg,
229+
ret = regmap_update_bits(rk808_rtc->regmap, rk808_rtc->creg->int_reg,
235230
BIT_RTC_INTERRUPTS_REG_IT_ALARM_M, 0);
236231

237232
return ret;
238233
}
239234

240235
static int rk808_rtc_start_alarm(struct rk808_rtc *rk808_rtc)
241236
{
242-
struct rk808 *rk808 = rk808_rtc->rk808;
243237
int ret;
244238

245-
ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->int_reg,
239+
ret = regmap_update_bits(rk808_rtc->regmap, rk808_rtc->creg->int_reg,
246240
BIT_RTC_INTERRUPTS_REG_IT_ALARM_M,
247241
BIT_RTC_INTERRUPTS_REG_IT_ALARM_M);
248242

@@ -252,7 +246,6 @@ static int rk808_rtc_start_alarm(struct rk808_rtc *rk808_rtc)
252246
static int rk808_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
253247
{
254248
struct rk808_rtc *rk808_rtc = dev_get_drvdata(dev);
255-
struct rk808 *rk808 = rk808_rtc->rk808;
256249
u8 alrm_data[NUM_ALARM_REGS];
257250
int ret;
258251

@@ -272,7 +265,7 @@ static int rk808_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
272265
alrm_data[4] = bin2bcd(alrm->time.tm_mon + 1);
273266
alrm_data[5] = bin2bcd(alrm->time.tm_year - 100);
274267

275-
ret = regmap_bulk_write(rk808->regmap,
268+
ret = regmap_bulk_write(rk808_rtc->regmap,
276269
rk808_rtc->creg->alarm_seconds_reg,
277270
alrm_data, NUM_ALARM_REGS);
278271
if (ret) {
@@ -313,20 +306,18 @@ static int rk808_rtc_alarm_irq_enable(struct device *dev,
313306
static irqreturn_t rk808_alarm_irq(int irq, void *data)
314307
{
315308
struct rk808_rtc *rk808_rtc = data;
316-
struct rk808 *rk808 = rk808_rtc->rk808;
317-
struct i2c_client *client = rk808->i2c;
318309
int ret;
319310

320-
ret = regmap_write(rk808->regmap, rk808_rtc->creg->status_reg,
311+
ret = regmap_write(rk808_rtc->regmap, rk808_rtc->creg->status_reg,
321312
RTC_STATUS_MASK);
322313
if (ret) {
323-
dev_err(&client->dev,
314+
dev_err(&rk808_rtc->rtc->dev,
324315
"%s:Failed to update RTC status: %d\n", __func__, ret);
325316
return ret;
326317
}
327318

328319
rtc_update_irq(rk808_rtc->rtc, 1, RTC_IRQF | RTC_AF);
329-
dev_dbg(&client->dev,
320+
dev_dbg(&rk808_rtc->rtc->dev,
330321
"%s:irq=%d\n", __func__, irq);
331322
return IRQ_HANDLED;
332323
}
@@ -404,10 +395,12 @@ static int rk808_rtc_probe(struct platform_device *pdev)
404395
break;
405396
}
406397
platform_set_drvdata(pdev, rk808_rtc);
407-
rk808_rtc->rk808 = rk808;
398+
rk808_rtc->regmap = dev_get_regmap(pdev->dev.parent, NULL);
399+
if (!rk808_rtc->regmap)
400+
return -ENODEV;
408401

409402
/* start rtc running by default, and use shadowed timer. */
410-
ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->ctrl_reg,
403+
ret = regmap_update_bits(rk808_rtc->regmap, rk808_rtc->creg->ctrl_reg,
411404
BIT_RTC_CTRL_REG_STOP_RTC_M |
412405
BIT_RTC_CTRL_REG_RTC_READSEL_M,
413406
BIT_RTC_CTRL_REG_RTC_READSEL_M);
@@ -417,7 +410,7 @@ static int rk808_rtc_probe(struct platform_device *pdev)
417410
return ret;
418411
}
419412

420-
ret = regmap_write(rk808->regmap, rk808_rtc->creg->status_reg,
413+
ret = regmap_write(rk808_rtc->regmap, rk808_rtc->creg->status_reg,
421414
RTC_STATUS_MASK);
422415
if (ret) {
423416
dev_err(&pdev->dev,

0 commit comments

Comments
 (0)