Update rtc-pcf85063 source from linux-5.15.137

This commit is contained in:
Lee Miller 2024-02-03 02:34:30 +02:00
parent dd294ddb93
commit d4dd15b69c
Signed by: lee.miller
GPG Key ID: 4F97A5EA88F4AB63
1 changed files with 31 additions and 38 deletions

View File

@ -21,10 +21,10 @@
/* /*
* Information for this driver was pulled from the following datasheets. * Information for this driver was pulled from the following datasheets.
* *
* https://www.nxp.com/documents/data_sheet/PCF85063A.pdf * https://www.nxp.com/docs/en/data-sheet/PCF85063A.pdf
* https://www.nxp.com/documents/data_sheet/PCF85063TP.pdf * https://www.nxp.com/docs/en/data-sheet/PCF85063TP.pdf
* *
* PCF85063A -- Rev. 6 18 November 2015 * PCF85063A -- Rev. 7 30 March 2018
* PCF85063TP -- Rev. 4 6 May 2015 * PCF85063TP -- Rev. 4 6 May 2015
* *
* https://www.microcrystal.com/fileadmin/Media/Products/RTC/App.Manual/RV-8263-C7_App-Manual.pdf * https://www.microcrystal.com/fileadmin/Media/Products/RTC/App.Manual/RV-8263-C7_App-Manual.pdf
@ -167,10 +167,10 @@ static int pcf85063_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
if (ret) if (ret)
return ret; return ret;
alrm->time.tm_sec = bcd2bin(buf[0]); alrm->time.tm_sec = bcd2bin(buf[0] & 0x7f);
alrm->time.tm_min = bcd2bin(buf[1]); alrm->time.tm_min = bcd2bin(buf[1] & 0x7f);
alrm->time.tm_hour = bcd2bin(buf[2]); alrm->time.tm_hour = bcd2bin(buf[2] & 0x3f);
alrm->time.tm_mday = bcd2bin(buf[3]); alrm->time.tm_mday = bcd2bin(buf[3] & 0x3f);
ret = regmap_read(pcf85063->regmap, PCF85063_REG_CTRL2, &val); ret = regmap_read(pcf85063->regmap, PCF85063_REG_CTRL2, &val);
if (ret) if (ret)
@ -307,14 +307,6 @@ static int pcf85063_ioctl(struct device *dev, unsigned int cmd,
} }
static const struct rtc_class_ops pcf85063_rtc_ops = { static const struct rtc_class_ops pcf85063_rtc_ops = {
.read_time = pcf85063_rtc_read_time,
.set_time = pcf85063_rtc_set_time,
.read_offset = pcf85063_read_offset,
.set_offset = pcf85063_set_offset,
.ioctl = pcf85063_ioctl,
};
static const struct rtc_class_ops pcf85063_rtc_ops_alarm = {
.read_time = pcf85063_rtc_read_time, .read_time = pcf85063_rtc_read_time,
.set_time = pcf85063_rtc_set_time, .set_time = pcf85063_rtc_set_time,
.read_offset = pcf85063_read_offset, .read_offset = pcf85063_read_offset,
@ -430,7 +422,7 @@ static int pcf85063_clkout_control(struct clk_hw *hw, bool enable)
unsigned int buf; unsigned int buf;
int ret; int ret;
ret = regmap_read(pcf85063->regmap, PCF85063_REG_OFFSET, &buf); ret = regmap_read(pcf85063->regmap, PCF85063_REG_CTRL2, &buf);
if (ret < 0) if (ret < 0)
return ret; return ret;
buf &= PCF85063_REG_CLKO_F_MASK; buf &= PCF85063_REG_CLKO_F_MASK;
@ -508,15 +500,6 @@ static struct clk *pcf85063_clkout_register_clk(struct pcf85063 *pcf85063)
} }
#endif #endif
static const struct pcf85063_config pcf85063a_config = {
.regmap = {
.reg_bits = 8,
.val_bits = 8,
.max_register = 0x11,
},
.has_alarms = 1,
};
static const struct pcf85063_config pcf85063tp_config = { static const struct pcf85063_config pcf85063tp_config = {
.regmap = { .regmap = {
.reg_bits = 8, .reg_bits = 8,
@ -525,16 +508,6 @@ static const struct pcf85063_config pcf85063tp_config = {
}, },
}; };
static const struct pcf85063_config rv8263_config = {
.regmap = {
.reg_bits = 8,
.val_bits = 8,
.max_register = 0x11,
},
.has_alarms = 1,
.force_cap_7000 = 1,
};
static int pcf85063_probe(struct i2c_client *client) static int pcf85063_probe(struct i2c_client *client)
{ {
struct pcf85063 *pcf85063; struct pcf85063 *pcf85063;
@ -586,6 +559,7 @@ static int pcf85063_probe(struct i2c_client *client)
pcf85063->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; pcf85063->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
pcf85063->rtc->range_max = RTC_TIMESTAMP_END_2099; pcf85063->rtc->range_max = RTC_TIMESTAMP_END_2099;
pcf85063->rtc->uie_unsupported = 1; pcf85063->rtc->uie_unsupported = 1;
clear_bit(RTC_FEATURE_ALARM, pcf85063->rtc->features);
if (config->has_alarms && client->irq > 0) { if (config->has_alarms && client->irq > 0) {
err = devm_request_threaded_irq(&client->dev, client->irq, err = devm_request_threaded_irq(&client->dev, client->irq,
@ -596,7 +570,7 @@ static int pcf85063_probe(struct i2c_client *client)
dev_warn(&pcf85063->rtc->dev, dev_warn(&pcf85063->rtc->dev,
"unable to request IRQ, alarms disabled\n"); "unable to request IRQ, alarms disabled\n");
} else { } else {
pcf85063->rtc->ops = &pcf85063_rtc_ops_alarm; set_bit(RTC_FEATURE_ALARM, pcf85063->rtc->features);
device_init_wakeup(&client->dev, true); device_init_wakeup(&client->dev, true);
err = dev_pm_set_wake_irq(&client->dev, client->irq); err = dev_pm_set_wake_irq(&client->dev, client->irq);
if (err) if (err)
@ -606,17 +580,36 @@ static int pcf85063_probe(struct i2c_client *client)
} }
nvmem_cfg.priv = pcf85063->regmap; nvmem_cfg.priv = pcf85063->regmap;
rtc_nvmem_register(pcf85063->rtc, &nvmem_cfg); devm_rtc_nvmem_register(pcf85063->rtc, &nvmem_cfg);
#ifdef CONFIG_COMMON_CLK #ifdef CONFIG_COMMON_CLK
/* register clk in common clk framework */ /* register clk in common clk framework */
pcf85063_clkout_register_clk(pcf85063); pcf85063_clkout_register_clk(pcf85063);
#endif #endif
return rtc_register_device(pcf85063->rtc); return devm_rtc_register_device(pcf85063->rtc);
} }
#ifdef CONFIG_OF #ifdef CONFIG_OF
static const struct pcf85063_config pcf85063a_config = {
.regmap = {
.reg_bits = 8,
.val_bits = 8,
.max_register = 0x11,
},
.has_alarms = 1,
};
static const struct pcf85063_config rv8263_config = {
.regmap = {
.reg_bits = 8,
.val_bits = 8,
.max_register = 0x11,
},
.has_alarms = 1,
.force_cap_7000 = 1,
};
static const struct of_device_id pcf85063_of_match[] = { static const struct of_device_id pcf85063_of_match[] = {
{ .compatible = "nxp,pcf85063", .data = &pcf85063tp_config }, { .compatible = "nxp,pcf85063", .data = &pcf85063tp_config },
{ .compatible = "nxp,pcf85063tp", .data = &pcf85063tp_config }, { .compatible = "nxp,pcf85063tp", .data = &pcf85063tp_config },