Move kernel config and patches to kernel 6.6. Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
216 lines
7.6 KiB
Diff
216 lines
7.6 KiB
Diff
From 2e830ccc21eb67a4c2490279d907e5e9199e5156 Mon Sep 17 00:00:00 2001
|
|
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
|
Date: Thu, 20 Oct 2022 22:42:41 +0200
|
|
Subject: [PATCH] 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 <alexandre.belloni@bootlin.com>
|
|
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
|
Link: https://lore.kernel.org/r/20221020204251.108565-4-sebastian.reichel@collabora.com
|
|
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
|
|
---
|
|
drivers/rtc/rtc-rk808.c | 47 ++++++++++++++++++-----------------------
|
|
1 file changed, 20 insertions(+), 27 deletions(-)
|
|
|
|
--- a/drivers/rtc/rtc-rk808.c
|
|
+++ b/drivers/rtc/rtc-rk808.c
|
|
@@ -14,7 +14,6 @@
|
|
#include <linux/bcd.h>
|
|
#include <linux/mfd/rk808.h>
|
|
#include <linux/platform_device.h>
|
|
-#include <linux/i2c.h>
|
|
|
|
/* RTC_CTRL_REG bitfields */
|
|
#define BIT_RTC_CTRL_REG_STOP_RTC_M BIT(0)
|
|
@@ -51,7 +50,7 @@ struct rk_rtc_compat_reg {
|
|
};
|
|
|
|
struct rk808_rtc {
|
|
- struct rk808 *rk808;
|
|
+ struct regmap *regmap;
|
|
struct rtc_device *rtc;
|
|
struct rk_rtc_compat_reg *creg;
|
|
int irq;
|
|
@@ -97,12 +96,11 @@ static void gregorian_to_rockchip(struct
|
|
static int rk808_rtc_readtime(struct device *dev, struct rtc_time *tm)
|
|
{
|
|
struct rk808_rtc *rk808_rtc = dev_get_drvdata(dev);
|
|
- struct rk808 *rk808 = rk808_rtc->rk808;
|
|
u8 rtc_data[NUM_TIME_REGS];
|
|
int ret;
|
|
|
|
/* Force an update of the shadowed registers right now */
|
|
- ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->ctrl_reg,
|
|
+ ret = regmap_update_bits(rk808_rtc->regmap, rk808_rtc->creg->ctrl_reg,
|
|
BIT_RTC_CTRL_REG_RTC_GET_TIME,
|
|
BIT_RTC_CTRL_REG_RTC_GET_TIME);
|
|
if (ret) {
|
|
@@ -116,7 +114,7 @@ static int rk808_rtc_readtime(struct dev
|
|
* 32khz. If we clear the GET_TIME bit here, the time of i2c transfer
|
|
* certainly more than 31.25us: 16 * 2.5us at 400kHz bus frequency.
|
|
*/
|
|
- ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->ctrl_reg,
|
|
+ ret = regmap_update_bits(rk808_rtc->regmap, rk808_rtc->creg->ctrl_reg,
|
|
BIT_RTC_CTRL_REG_RTC_GET_TIME,
|
|
0);
|
|
if (ret) {
|
|
@@ -124,7 +122,7 @@ static int rk808_rtc_readtime(struct dev
|
|
return ret;
|
|
}
|
|
|
|
- ret = regmap_bulk_read(rk808->regmap, rk808_rtc->creg->seconds_reg,
|
|
+ ret = regmap_bulk_read(rk808_rtc->regmap, rk808_rtc->creg->seconds_reg,
|
|
rtc_data, NUM_TIME_REGS);
|
|
if (ret) {
|
|
dev_err(dev, "Failed to bulk read rtc_data: %d\n", ret);
|
|
@@ -148,7 +146,6 @@ static int rk808_rtc_readtime(struct dev
|
|
static int rk808_rtc_set_time(struct device *dev, struct rtc_time *tm)
|
|
{
|
|
struct rk808_rtc *rk808_rtc = dev_get_drvdata(dev);
|
|
- struct rk808 *rk808 = rk808_rtc->rk808;
|
|
u8 rtc_data[NUM_TIME_REGS];
|
|
int ret;
|
|
|
|
@@ -163,7 +160,7 @@ static int rk808_rtc_set_time(struct dev
|
|
rtc_data[6] = bin2bcd(tm->tm_wday);
|
|
|
|
/* Stop RTC while updating the RTC registers */
|
|
- ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->ctrl_reg,
|
|
+ ret = regmap_update_bits(rk808_rtc->regmap, rk808_rtc->creg->ctrl_reg,
|
|
BIT_RTC_CTRL_REG_STOP_RTC_M,
|
|
BIT_RTC_CTRL_REG_STOP_RTC_M);
|
|
if (ret) {
|
|
@@ -171,14 +168,14 @@ static int rk808_rtc_set_time(struct dev
|
|
return ret;
|
|
}
|
|
|
|
- ret = regmap_bulk_write(rk808->regmap, rk808_rtc->creg->seconds_reg,
|
|
+ ret = regmap_bulk_write(rk808_rtc->regmap, rk808_rtc->creg->seconds_reg,
|
|
rtc_data, NUM_TIME_REGS);
|
|
if (ret) {
|
|
dev_err(dev, "Failed to bull write rtc_data: %d\n", ret);
|
|
return ret;
|
|
}
|
|
/* Start RTC again */
|
|
- ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->ctrl_reg,
|
|
+ ret = regmap_update_bits(rk808_rtc->regmap, rk808_rtc->creg->ctrl_reg,
|
|
BIT_RTC_CTRL_REG_STOP_RTC_M, 0);
|
|
if (ret) {
|
|
dev_err(dev, "Failed to update RTC control: %d\n", ret);
|
|
@@ -191,12 +188,11 @@ static int rk808_rtc_set_time(struct dev
|
|
static int rk808_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)
|
|
{
|
|
struct rk808_rtc *rk808_rtc = dev_get_drvdata(dev);
|
|
- struct rk808 *rk808 = rk808_rtc->rk808;
|
|
u8 alrm_data[NUM_ALARM_REGS];
|
|
uint32_t int_reg;
|
|
int ret;
|
|
|
|
- ret = regmap_bulk_read(rk808->regmap,
|
|
+ ret = regmap_bulk_read(rk808_rtc->regmap,
|
|
rk808_rtc->creg->alarm_seconds_reg,
|
|
alrm_data, NUM_ALARM_REGS);
|
|
if (ret) {
|
|
@@ -212,7 +208,7 @@ static int rk808_rtc_readalarm(struct de
|
|
alrm->time.tm_year = (bcd2bin(alrm_data[5] & YEARS_REG_MSK)) + 100;
|
|
rockchip_to_gregorian(&alrm->time);
|
|
|
|
- ret = regmap_read(rk808->regmap, rk808_rtc->creg->int_reg, &int_reg);
|
|
+ ret = regmap_read(rk808_rtc->regmap, rk808_rtc->creg->int_reg, &int_reg);
|
|
if (ret) {
|
|
dev_err(dev, "Failed to read RTC INT REG: %d\n", ret);
|
|
return ret;
|
|
@@ -228,10 +224,9 @@ static int rk808_rtc_readalarm(struct de
|
|
|
|
static int rk808_rtc_stop_alarm(struct rk808_rtc *rk808_rtc)
|
|
{
|
|
- struct rk808 *rk808 = rk808_rtc->rk808;
|
|
int ret;
|
|
|
|
- ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->int_reg,
|
|
+ ret = regmap_update_bits(rk808_rtc->regmap, rk808_rtc->creg->int_reg,
|
|
BIT_RTC_INTERRUPTS_REG_IT_ALARM_M, 0);
|
|
|
|
return ret;
|
|
@@ -239,10 +234,9 @@ static int rk808_rtc_stop_alarm(struct r
|
|
|
|
static int rk808_rtc_start_alarm(struct rk808_rtc *rk808_rtc)
|
|
{
|
|
- struct rk808 *rk808 = rk808_rtc->rk808;
|
|
int ret;
|
|
|
|
- ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->int_reg,
|
|
+ ret = regmap_update_bits(rk808_rtc->regmap, rk808_rtc->creg->int_reg,
|
|
BIT_RTC_INTERRUPTS_REG_IT_ALARM_M,
|
|
BIT_RTC_INTERRUPTS_REG_IT_ALARM_M);
|
|
|
|
@@ -252,7 +246,6 @@ static int rk808_rtc_start_alarm(struct
|
|
static int rk808_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
|
|
{
|
|
struct rk808_rtc *rk808_rtc = dev_get_drvdata(dev);
|
|
- struct rk808 *rk808 = rk808_rtc->rk808;
|
|
u8 alrm_data[NUM_ALARM_REGS];
|
|
int ret;
|
|
|
|
@@ -272,7 +265,7 @@ static int rk808_rtc_setalarm(struct dev
|
|
alrm_data[4] = bin2bcd(alrm->time.tm_mon + 1);
|
|
alrm_data[5] = bin2bcd(alrm->time.tm_year - 100);
|
|
|
|
- ret = regmap_bulk_write(rk808->regmap,
|
|
+ ret = regmap_bulk_write(rk808_rtc->regmap,
|
|
rk808_rtc->creg->alarm_seconds_reg,
|
|
alrm_data, NUM_ALARM_REGS);
|
|
if (ret) {
|
|
@@ -313,20 +306,18 @@ static int rk808_rtc_alarm_irq_enable(st
|
|
static irqreturn_t rk808_alarm_irq(int irq, void *data)
|
|
{
|
|
struct rk808_rtc *rk808_rtc = data;
|
|
- struct rk808 *rk808 = rk808_rtc->rk808;
|
|
- struct i2c_client *client = rk808->i2c;
|
|
int ret;
|
|
|
|
- ret = regmap_write(rk808->regmap, rk808_rtc->creg->status_reg,
|
|
+ ret = regmap_write(rk808_rtc->regmap, rk808_rtc->creg->status_reg,
|
|
RTC_STATUS_MASK);
|
|
if (ret) {
|
|
- dev_err(&client->dev,
|
|
+ dev_err(&rk808_rtc->rtc->dev,
|
|
"%s:Failed to update RTC status: %d\n", __func__, ret);
|
|
return ret;
|
|
}
|
|
|
|
rtc_update_irq(rk808_rtc->rtc, 1, RTC_IRQF | RTC_AF);
|
|
- dev_dbg(&client->dev,
|
|
+ dev_dbg(&rk808_rtc->rtc->dev,
|
|
"%s:irq=%d\n", __func__, irq);
|
|
return IRQ_HANDLED;
|
|
}
|
|
@@ -404,10 +395,12 @@ static int rk808_rtc_probe(struct platfo
|
|
break;
|
|
}
|
|
platform_set_drvdata(pdev, rk808_rtc);
|
|
- rk808_rtc->rk808 = rk808;
|
|
+ rk808_rtc->regmap = dev_get_regmap(pdev->dev.parent, NULL);
|
|
+ if (!rk808_rtc->regmap)
|
|
+ return -ENODEV;
|
|
|
|
/* start rtc running by default, and use shadowed timer. */
|
|
- ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->ctrl_reg,
|
|
+ ret = regmap_update_bits(rk808_rtc->regmap, rk808_rtc->creg->ctrl_reg,
|
|
BIT_RTC_CTRL_REG_STOP_RTC_M |
|
|
BIT_RTC_CTRL_REG_RTC_READSEL_M,
|
|
BIT_RTC_CTRL_REG_RTC_READSEL_M);
|
|
@@ -417,7 +410,7 @@ static int rk808_rtc_probe(struct platfo
|
|
return ret;
|
|
}
|
|
|
|
- ret = regmap_write(rk808->regmap, rk808_rtc->creg->status_reg,
|
|
+ ret = regmap_write(rk808_rtc->regmap, rk808_rtc->creg->status_reg,
|
|
RTC_STATUS_MASK);
|
|
if (ret) {
|
|
dev_err(&pdev->dev,
|