rtc: ds1685: remove improper datetime access ABI
authorAlexandre Belloni <alexandre.belloni@bootlin.com>
Mon, 18 Jun 2018 08:52:01 +0000 (10:52 +0200)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Wed, 20 Jun 2018 10:36:04 +0000 (12:36 +0200)
The driver exposes an undocumented ABI to access the date and time
registers. It is not actually used by any userspace tools. Remove it.

Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/rtc/rtc-ds1685.c

index 5c0db6c..c3755d0 100644 (file)
@@ -1520,217 +1520,6 @@ ds1685_rtc_sysfs_ctrl4b_grp = {
        .name = "ctrl4b",
        .attrs = ds1685_rtc_sysfs_ctrl4b_attrs,
 };
-
-
-/**
- * struct ds1685_rtc_ctrl_regs.
- * @name: char pointer for the bit name.
- * @reg: control register the bit is in.
- * @bit: the bit's offset in the register.
- */
-struct ds1685_rtc_time_regs {
-       const char *name;
-       const u8 reg;
-       const u8 mask;
-       const u8 min;
-       const u8 max;
-};
-
-/*
- * Time/Date register lookup tables.
- */
-static const struct ds1685_rtc_time_regs
-ds1685_time_regs_bcd_table[] = {
-       { "seconds",       RTC_SECS,       RTC_SECS_BCD_MASK,   0, 59 },
-       { "minutes",       RTC_MINS,       RTC_MINS_BCD_MASK,   0, 59 },
-       { "hours",         RTC_HRS,        RTC_HRS_24_BCD_MASK, 0, 23 },
-       { "wday",          RTC_WDAY,       RTC_WDAY_MASK,       1,  7 },
-       { "mday",          RTC_MDAY,       RTC_MDAY_BCD_MASK,   1, 31 },
-       { "month",         RTC_MONTH,      RTC_MONTH_BCD_MASK,  1, 12 },
-       { "year",          RTC_YEAR,       RTC_YEAR_BCD_MASK,   0, 99 },
-       { "century",       RTC_CENTURY,    RTC_CENTURY_MASK,    0, 99 },
-       { "alarm_seconds", RTC_SECS_ALARM, RTC_SECS_BCD_MASK,   0, 59 },
-       { "alarm_minutes", RTC_MINS_ALARM, RTC_MINS_BCD_MASK,   0, 59 },
-       { "alarm_hours",   RTC_HRS_ALARM,  RTC_HRS_24_BCD_MASK, 0, 23 },
-       { "alarm_mday",    RTC_MDAY_ALARM, RTC_MDAY_ALARM_MASK, 1, 31 },
-       { NULL,            0,              0,                   0,  0 },
-};
-
-static const struct ds1685_rtc_time_regs
-ds1685_time_regs_bin_table[] = {
-       { "seconds",       RTC_SECS,       RTC_SECS_BIN_MASK,   0x00, 0x3b },
-       { "minutes",       RTC_MINS,       RTC_MINS_BIN_MASK,   0x00, 0x3b },
-       { "hours",         RTC_HRS,        RTC_HRS_24_BIN_MASK, 0x00, 0x17 },
-       { "wday",          RTC_WDAY,       RTC_WDAY_MASK,       0x01, 0x07 },
-       { "mday",          RTC_MDAY,       RTC_MDAY_BIN_MASK,   0x01, 0x1f },
-       { "month",         RTC_MONTH,      RTC_MONTH_BIN_MASK,  0x01, 0x0c },
-       { "year",          RTC_YEAR,       RTC_YEAR_BIN_MASK,   0x00, 0x63 },
-       { "century",       RTC_CENTURY,    RTC_CENTURY_MASK,    0x00, 0x63 },
-       { "alarm_seconds", RTC_SECS_ALARM, RTC_SECS_BIN_MASK,   0x00, 0x3b },
-       { "alarm_minutes", RTC_MINS_ALARM, RTC_MINS_BIN_MASK,   0x00, 0x3b },
-       { "alarm_hours",   RTC_HRS_ALARM,  RTC_HRS_24_BIN_MASK, 0x00, 0x17 },
-       { "alarm_mday",    RTC_MDAY_ALARM, RTC_MDAY_ALARM_MASK, 0x01, 0x1f },
-       { NULL,            0,              0,                   0x00, 0x00 },
-};
-
-/**
- * ds1685_rtc_sysfs_time_regs_bcd_lookup - time/date reg bit lookup function.
- * @name: register bit to look up in ds1685_time_regs_bcd_table.
- */
-static const struct ds1685_rtc_time_regs*
-ds1685_rtc_sysfs_time_regs_lookup(const char *name, bool bcd_mode)
-{
-       const struct ds1685_rtc_time_regs *p;
-
-       if (bcd_mode)
-               p = ds1685_time_regs_bcd_table;
-       else
-               p = ds1685_time_regs_bin_table;
-
-       for (; p->name != NULL; ++p)
-               if (strcmp(p->name, name) == 0)
-                       return p;
-
-       return NULL;
-}
-
-/**
- * ds1685_rtc_sysfs_time_regs_show - reads a time/date register via sysfs.
- * @dev: pointer to device structure.
- * @attr: pointer to device_attribute structure.
- * @buf: pointer to char array to hold the output.
- */
-static ssize_t
-ds1685_rtc_sysfs_time_regs_show(struct device *dev,
-                               struct device_attribute *attr, char *buf)
-{
-       u8 tmp;
-       struct ds1685_priv *rtc = dev_get_drvdata(dev);
-       const struct ds1685_rtc_time_regs *bcd_reg_info =
-               ds1685_rtc_sysfs_time_regs_lookup(attr->attr.name, true);
-       const struct ds1685_rtc_time_regs *bin_reg_info =
-               ds1685_rtc_sysfs_time_regs_lookup(attr->attr.name, false);
-
-       /* Make sure we actually matched something. */
-       if (!bcd_reg_info || !bin_reg_info)
-               return -EINVAL;
-
-       /* bcd_reg_info->reg == bin_reg_info->reg. */
-       ds1685_rtc_begin_data_access(rtc);
-       tmp = rtc->read(rtc, bcd_reg_info->reg);
-       ds1685_rtc_end_data_access(rtc);
-
-       tmp = ds1685_rtc_bcd2bin(rtc, tmp, bcd_reg_info->mask,
-                                bin_reg_info->mask);
-
-       return sprintf(buf, "%d\n", tmp);
-}
-
-/**
- * ds1685_rtc_sysfs_time_regs_store - writes a time/date register via sysfs.
- * @dev: pointer to device structure.
- * @attr: pointer to device_attribute structure.
- * @buf: pointer to char array to hold the output.
- * @count: number of bytes written.
- */
-static ssize_t
-ds1685_rtc_sysfs_time_regs_store(struct device *dev,
-                                struct device_attribute *attr,
-                                const char *buf, size_t count)
-{
-       long int val = 0;
-       struct ds1685_priv *rtc = dev_get_drvdata(dev);
-       const struct ds1685_rtc_time_regs *bcd_reg_info =
-               ds1685_rtc_sysfs_time_regs_lookup(attr->attr.name, true);
-       const struct ds1685_rtc_time_regs *bin_reg_info =
-               ds1685_rtc_sysfs_time_regs_lookup(attr->attr.name, false);
-
-       /* We only accept numbers. */
-       if (kstrtol(buf, 10, &val) < 0)
-               return -EINVAL;
-
-       /* Make sure we actually matched something. */
-       if (!bcd_reg_info || !bin_reg_info)
-               return -EINVAL;
-
-       /* Check for a valid range. */
-       if (rtc->bcd_mode) {
-               if ((val < bcd_reg_info->min) || (val > bcd_reg_info->max))
-                       return -ERANGE;
-       } else {
-               if ((val < bin_reg_info->min) || (val > bin_reg_info->max))
-                       return -ERANGE;
-       }
-
-       val = ds1685_rtc_bin2bcd(rtc, val, bin_reg_info->mask,
-                                bcd_reg_info->mask);
-
-       /* bcd_reg_info->reg == bin_reg_info->reg. */
-       ds1685_rtc_begin_data_access(rtc);
-       rtc->write(rtc, bcd_reg_info->reg, val);
-       ds1685_rtc_end_data_access(rtc);
-
-       return count;
-}
-
-/**
- * DS1685_RTC_SYSFS_REG_RW - device_attribute for a read-write time register.
- * @reg: time/date register to read or write.
- */
-#define DS1685_RTC_SYSFS_TIME_REG_RW(reg)                              \
-       static DEVICE_ATTR(reg, S_IRUGO | S_IWUSR,                      \
-       ds1685_rtc_sysfs_time_regs_show,                                \
-       ds1685_rtc_sysfs_time_regs_store)
-
-/*
- * Time/Date Register bits.
- */
-DS1685_RTC_SYSFS_TIME_REG_RW(seconds);
-DS1685_RTC_SYSFS_TIME_REG_RW(minutes);
-DS1685_RTC_SYSFS_TIME_REG_RW(hours);
-DS1685_RTC_SYSFS_TIME_REG_RW(wday);
-DS1685_RTC_SYSFS_TIME_REG_RW(mday);
-DS1685_RTC_SYSFS_TIME_REG_RW(month);
-DS1685_RTC_SYSFS_TIME_REG_RW(year);
-DS1685_RTC_SYSFS_TIME_REG_RW(century);
-DS1685_RTC_SYSFS_TIME_REG_RW(alarm_seconds);
-DS1685_RTC_SYSFS_TIME_REG_RW(alarm_minutes);
-DS1685_RTC_SYSFS_TIME_REG_RW(alarm_hours);
-DS1685_RTC_SYSFS_TIME_REG_RW(alarm_mday);
-
-static struct attribute*
-ds1685_rtc_sysfs_time_attrs[] = {
-       &dev_attr_seconds.attr,
-       &dev_attr_minutes.attr,
-       &dev_attr_hours.attr,
-       &dev_attr_wday.attr,
-       &dev_attr_mday.attr,
-       &dev_attr_month.attr,
-       &dev_attr_year.attr,
-       &dev_attr_century.attr,
-       NULL,
-};
-
-static const struct attribute_group
-ds1685_rtc_sysfs_time_grp = {
-       .name = "datetime",
-       .attrs = ds1685_rtc_sysfs_time_attrs,
-};
-
-static struct attribute*
-ds1685_rtc_sysfs_alarm_attrs[] = {
-       &dev_attr_alarm_seconds.attr,
-       &dev_attr_alarm_minutes.attr,
-       &dev_attr_alarm_hours.attr,
-       &dev_attr_alarm_mday.attr,
-       NULL,
-};
-
-static const struct attribute_group
-ds1685_rtc_sysfs_alarm_grp = {
-       .name = "alarm",
-       .attrs = ds1685_rtc_sysfs_alarm_attrs,
-};
 #endif /* CONFIG_RTC_DS1685_SYSFS_REGS */
 
 
@@ -1776,14 +1565,6 @@ ds1685_rtc_sysfs_register(struct device *dev)
        ret = sysfs_create_group(&dev->kobj, &ds1685_rtc_sysfs_ctrl4b_grp);
        if (ret)
                return ret;
-
-       ret = sysfs_create_group(&dev->kobj, &ds1685_rtc_sysfs_time_grp);
-       if (ret)
-               return ret;
-
-       ret = sysfs_create_group(&dev->kobj, &ds1685_rtc_sysfs_alarm_grp);
-       if (ret)
-               return ret;
 #endif
        return 0;
 }
@@ -1805,8 +1586,6 @@ ds1685_rtc_sysfs_unregister(struct device *dev)
        sysfs_remove_group(&dev->kobj, &ds1685_rtc_sysfs_ctrld_grp);
        sysfs_remove_group(&dev->kobj, &ds1685_rtc_sysfs_ctrl4a_grp);
        sysfs_remove_group(&dev->kobj, &ds1685_rtc_sysfs_ctrl4b_grp);
-       sysfs_remove_group(&dev->kobj, &ds1685_rtc_sysfs_time_grp);
-       sysfs_remove_group(&dev->kobj, &ds1685_rtc_sysfs_alarm_grp);
 #endif
 
        return 0;