#include <linux/module.h>
#include <linux/regmap.h>
#define SD3078_REG_SC 0x00
#define SD3078_REG_MN 0x01
#define SD3078_REG_HR 0x02
#define SD3078_REG_DW 0x03
#define SD3078_REG_DM 0x04
#define SD3078_REG_MO 0x05
#define SD3078_REG_YR 0x06
#define SD3078_REG_CTRL1 0x0f
#define SD3078_REG_CTRL2 0x10
#define SD3078_REG_CTRL3 0x11
#define NUM_TIME_REGS (SD3078_REG_YR - SD3078_REG_SC + 1)
#define WRITE_PROTECT_EN 0
static void sd3078_enable_reg_write(struct sd3078 *sd3078)
regmap_update_bits(sd3078->regmap, SD3078_REG_CTRL2,
regmap_update_bits(sd3078->regmap, SD3078_REG_CTRL1,
regmap_update_bits(sd3078->regmap, SD3078_REG_CTRL1,
static void sd3078_disable_reg_write(struct sd3078 *sd3078)
regmap_update_bits(sd3078->regmap, SD3078_REG_CTRL1,
regmap_update_bits(sd3078->regmap, SD3078_REG_CTRL1,
regmap_update_bits(sd3078->regmap, SD3078_REG_CTRL2,
static int sd3078_rtc_read_time(struct device *dev, struct rtc_time *tm)
unsigned char rtc_data[NUM_TIME_REGS] = {0};
struct i2c_client *client = to_i2c_client(dev);
struct sd3078 *sd3078 = i2c_get_clientdata(client);
ret = regmap_bulk_read(sd3078->regmap, SD3078_REG_SC, rtc_data,