twl_rtc
static int twl_rtc_read_u8(struct twl_rtc *twl_rtc, u8 *data, u8 reg)
ret = twl_i2c_read_u8(TWL_MODULE_RTC, data, (twl_rtc->reg_map[reg]));
static int twl_rtc_write_u8(struct twl_rtc *twl_rtc, u8 data, u8 reg)
ret = twl_i2c_write_u8(TWL_MODULE_RTC, data, (twl_rtc->reg_map[reg]));
static int set_rtc_irq_bit(struct twl_rtc *twl_rtc, unsigned char bit)
if (twl_rtc->rtc_irq_bits & bit)
val = twl_rtc->rtc_irq_bits | bit;
ret = twl_rtc_write_u8(twl_rtc, val, REG_RTC_INTERRUPTS_REG);
twl_rtc->rtc_irq_bits = val;
static int mask_rtc_irq_bit(struct twl_rtc *twl_rtc, unsigned char bit)
if (!(twl_rtc->rtc_irq_bits & bit))
val = twl_rtc->rtc_irq_bits & ~bit;
ret = twl_rtc_write_u8(twl_rtc, val, REG_RTC_INTERRUPTS_REG);
twl_rtc->rtc_irq_bits = val;
struct twl_rtc *twl_rtc = dev_get_drvdata(dev);
ret = set_rtc_irq_bit(twl_rtc,
if (device_can_wakeup(dev) && !twl_rtc->wake_enabled) {
twl_rtc->wake_enabled = true;
ret = mask_rtc_irq_bit(twl_rtc,
if (twl_rtc->wake_enabled) {
twl_rtc->wake_enabled = false;
struct twl_rtc *twl_rtc = dev_get_drvdata(dev);
ret = twl_rtc_read_u8(twl_rtc, &save_control, REG_RTC_CTRL_REG);
if (twl_rtc->class == TWL_6030) {
ret = twl_rtc_write_u8(twl_rtc, save_control,
if (twl_rtc->class == TWL_6030)
ret = twl_rtc_write_u8(twl_rtc, rtc_control, REG_RTC_CTRL_REG);
(twl_rtc->reg_map[REG_SECONDS_REG]), ALL_TIME_REGS);
if (twl_rtc->class == TWL_6030) {
ret = twl_rtc_write_u8(twl_rtc, save_control, REG_RTC_CTRL_REG);
struct twl_rtc *twl_rtc = dev_get_drvdata(dev);
ret = twl_rtc_read_u8(twl_rtc, &save_control, REG_RTC_CTRL_REG);
ret = twl_rtc_write_u8(twl_rtc, save_control, REG_RTC_CTRL_REG);
(twl_rtc->reg_map[REG_SECONDS_REG]), ALL_TIME_REGS);
ret = twl_rtc_write_u8(twl_rtc, save_control, REG_RTC_CTRL_REG);
struct twl_rtc *twl_rtc = dev_get_drvdata(dev);
twl_rtc->reg_map[REG_ALARM_SECONDS_REG], ALL_TIME_REGS);
if (twl_rtc->rtc_irq_bits & BIT_RTC_INTERRUPTS_REG_IT_ALARM_M)
struct twl_rtc *twl_rtc = dev_get_drvdata(dev);
twl_rtc->reg_map[REG_ALARM_SECONDS_REG], ALL_TIME_REGS);
struct twl_rtc *twl_rtc = data;
res = twl_rtc_read_u8(twl_rtc, &rd_reg, REG_RTC_STATUS_REG);
res = twl_rtc_write_u8(twl_rtc, BIT_RTC_STATUS_REG_ALARM_M,
if (twl_rtc->class == TWL_4030) {
rtc_update_irq(twl_rtc->rtc, 1, events);
struct twl_rtc *twl_rtc;
twl_rtc = devm_kzalloc(&pdev->dev, sizeof(*twl_rtc), GFP_KERNEL);
if (!twl_rtc)
twl_rtc->class = TWL_4030;
twl_rtc->reg_map = (u8 *)twl4030_rtc_reg_map;
twl_rtc->class = TWL_6030;
twl_rtc->reg_map = (u8 *)twl6030_rtc_reg_map;
ret = twl_rtc_read_u8(twl_rtc, &rd_reg, REG_RTC_STATUS_REG);
ret = twl_rtc_write_u8(twl_rtc, rd_reg, REG_RTC_STATUS_REG);
if (twl_rtc->class == TWL_6030) {
ret = twl_rtc_write_u8(twl_rtc, BIT_RTC_CTRL_REG_STOP_RTC_M,
ret = twl_rtc_write_u8(twl_rtc, 0, REG_RTC_INTERRUPTS_REG);
ret = twl_rtc_read_u8(twl_rtc, &twl_rtc->rtc_irq_bits,
platform_set_drvdata(pdev, twl_rtc);
twl_rtc->rtc = devm_rtc_device_register(&pdev->dev, pdev->name,
if (IS_ERR(twl_rtc->rtc))
return PTR_ERR(twl_rtc->rtc);
dev_name(&twl_rtc->rtc->dev), twl_rtc);
devm_rtc_nvmem_register(twl_rtc->rtc, &nvmem_cfg);
devm_rtc_nvmem_register(twl_rtc->rtc, &nvmem_cfg);
devm_rtc_nvmem_register(twl_rtc->rtc, &nvmem_cfg);
struct twl_rtc *twl_rtc = platform_get_drvdata(pdev);
mask_rtc_irq_bit(twl_rtc, BIT_RTC_INTERRUPTS_REG_IT_ALARM_M);
mask_rtc_irq_bit(twl_rtc, BIT_RTC_INTERRUPTS_REG_IT_TIMER_M);
if (twl_rtc->class == TWL_6030) {
struct twl_rtc *twl_rtc = platform_get_drvdata(pdev);
mask_rtc_irq_bit(twl_rtc, BIT_RTC_INTERRUPTS_REG_IT_TIMER_M);
struct twl_rtc *twl_rtc = dev_get_drvdata(dev);
twl_rtc->irqstat = twl_rtc->rtc_irq_bits;
mask_rtc_irq_bit(twl_rtc, BIT_RTC_INTERRUPTS_REG_IT_TIMER_M);
struct twl_rtc *twl_rtc = dev_get_drvdata(dev);
set_rtc_irq_bit(twl_rtc, twl_rtc->irqstat);