rtc: pm8xxx: use unaligned le32 helpers
Use the unaligned le32 helpers instead of open coding when accessing the time and alarm registers. Signed-off-by: Johan Hovold <johan+linaro@kernel.org> Reviewed-by: David Collins <quic_collinsd@quicinc.com> Link: https://lore.kernel.org/r/20230202155448.6715-8-johan+linaro@kernel.org Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
This commit is contained in:
parent
f081b74c1c
commit
79dd75661e
|
@ -12,6 +12,8 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
/* RTC_CTRL register bit fields */
|
||||
#define PM8xxx_RTC_ENABLE BIT(7)
|
||||
#define PM8xxx_RTC_ALARM_CLEAR BIT(0)
|
||||
|
@ -68,25 +70,21 @@ struct pm8xxx_rtc {
|
|||
*/
|
||||
static int pm8xxx_rtc_set_time(struct device *dev, struct rtc_time *tm)
|
||||
{
|
||||
int rc, i;
|
||||
struct pm8xxx_rtc *rtc_dd = dev_get_drvdata(dev);
|
||||
const struct pm8xxx_rtc_regs *regs = rtc_dd->regs;
|
||||
u8 value[NUM_8_BIT_RTC_REGS];
|
||||
bool alarm_enabled;
|
||||
unsigned long secs;
|
||||
int rc;
|
||||
|
||||
if (!rtc_dd->allow_set_time)
|
||||
return -ENODEV;
|
||||
|
||||
secs = rtc_tm_to_time64(tm);
|
||||
put_unaligned_le32(secs, value);
|
||||
|
||||
dev_dbg(dev, "Seconds value to be written to RTC = %lu\n", secs);
|
||||
|
||||
for (i = 0; i < NUM_8_BIT_RTC_REGS; i++) {
|
||||
value[i] = secs & 0xFF;
|
||||
secs >>= 8;
|
||||
}
|
||||
|
||||
rc = regmap_update_bits_check(rtc_dd->regmap, regs->alarm_ctrl,
|
||||
regs->alarm_en, 0, &alarm_enabled);
|
||||
if (rc)
|
||||
|
@ -157,9 +155,7 @@ static int pm8xxx_rtc_read_time(struct device *dev, struct rtc_time *tm)
|
|||
return rc;
|
||||
}
|
||||
|
||||
secs = value[0] | (value[1] << 8) | (value[2] << 16) |
|
||||
((unsigned long)value[3] << 24);
|
||||
|
||||
secs = get_unaligned_le32(value);
|
||||
rtc_time64_to_tm(secs, tm);
|
||||
|
||||
dev_dbg(dev, "secs = %lu, h:m:s == %ptRt, y-m-d = %ptRdr\n", secs, tm, tm);
|
||||
|
@ -169,18 +165,14 @@ static int pm8xxx_rtc_read_time(struct device *dev, struct rtc_time *tm)
|
|||
|
||||
static int pm8xxx_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
|
||||
{
|
||||
int rc, i;
|
||||
u8 value[NUM_8_BIT_RTC_REGS];
|
||||
struct pm8xxx_rtc *rtc_dd = dev_get_drvdata(dev);
|
||||
const struct pm8xxx_rtc_regs *regs = rtc_dd->regs;
|
||||
unsigned long secs;
|
||||
int rc;
|
||||
|
||||
secs = rtc_tm_to_time64(&alarm->time);
|
||||
|
||||
for (i = 0; i < NUM_8_BIT_RTC_REGS; i++) {
|
||||
value[i] = secs & 0xFF;
|
||||
secs >>= 8;
|
||||
}
|
||||
put_unaligned_le32(secs, value);
|
||||
|
||||
rc = regmap_update_bits(rtc_dd->regmap, regs->alarm_ctrl,
|
||||
regs->alarm_en, 0);
|
||||
|
@ -219,9 +211,7 @@ static int pm8xxx_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm)
|
|||
if (rc)
|
||||
return rc;
|
||||
|
||||
secs = value[0] | (value[1] << 8) | (value[2] << 16) |
|
||||
((unsigned long)value[3] << 24);
|
||||
|
||||
secs = get_unaligned_le32(value);
|
||||
rtc_time64_to_tm(secs, &alarm->time);
|
||||
|
||||
rc = regmap_read(rtc_dd->regmap, regs->alarm_ctrl, &ctrl_reg);
|
||||
|
|
Loading…
Reference in New Issue