Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 17e296eb authored by Gary Bisson's avatar Gary Bisson Committed by Alexandre Belloni
Browse files

rtc: m41t80: remove sqw sysfs entry



In order to use the proper clock framework to control this feature.

Signed-off-by: default avatarGary Bisson <gary.bisson@boundarydevices.com>
Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@free-electrons.com>
parent 0f546b05
Loading
Loading
Loading
Loading
+0 −88
Original line number Diff line number Diff line
@@ -446,96 +446,8 @@ static ssize_t flags_show(struct device *dev,
}
static DEVICE_ATTR_RO(flags);

static ssize_t sqwfreq_show(struct device *dev,
			    struct device_attribute *attr, char *buf)
{
	struct i2c_client *client = to_i2c_client(dev);
	struct m41t80_data *clientdata = i2c_get_clientdata(client);
	int val, reg_sqw;

	if (!(clientdata->features & M41T80_FEATURE_SQ))
		return -EINVAL;

	reg_sqw = M41T80_REG_SQW;
	if (clientdata->features & M41T80_FEATURE_SQ_ALT)
		reg_sqw = M41T80_REG_WDAY;
	val = i2c_smbus_read_byte_data(client, reg_sqw);
	if (val < 0)
		return val;
	val = (val >> 4) & 0xf;
	switch (val) {
	case 0:
		break;
	case 1:
		val = 32768;
		break;
	default:
		val = 32768 >> val;
	}
	return sprintf(buf, "%d\n", val);
}

static ssize_t sqwfreq_store(struct device *dev,
			     struct device_attribute *attr,
			     const char *buf, size_t count)
{
	struct i2c_client *client = to_i2c_client(dev);
	struct m41t80_data *clientdata = i2c_get_clientdata(client);
	int almon, sqw, reg_sqw, rc;
	unsigned long val;

	rc = kstrtoul(buf, 0, &val);
	if (rc < 0)
		return rc;

	if (!(clientdata->features & M41T80_FEATURE_SQ))
		return -EINVAL;

	if (val) {
		if (!is_power_of_2(val))
			return -EINVAL;
		val = ilog2(val);
		if (val == 15)
			val = 1;
		else if (val < 14)
			val = 15 - val;
		else
			return -EINVAL;
	}
	/* disable SQW, set SQW frequency & re-enable */
	almon = i2c_smbus_read_byte_data(client, M41T80_REG_ALARM_MON);
	if (almon < 0)
		return almon;
	reg_sqw = M41T80_REG_SQW;
	if (clientdata->features & M41T80_FEATURE_SQ_ALT)
		reg_sqw = M41T80_REG_WDAY;
	sqw = i2c_smbus_read_byte_data(client, reg_sqw);
	if (sqw < 0)
		return sqw;
	sqw = (sqw & 0x0f) | (val << 4);

	rc = i2c_smbus_write_byte_data(client, M41T80_REG_ALARM_MON,
				       almon & ~M41T80_ALMON_SQWE);
	if (rc < 0)
		return rc;

	if (val) {
		rc = i2c_smbus_write_byte_data(client, reg_sqw, sqw);
		if (rc < 0)
			return rc;

		rc = i2c_smbus_write_byte_data(client, M41T80_REG_ALARM_MON,
					       almon | M41T80_ALMON_SQWE);
		if (rc < 0)
			return rc;
	}
	return count;
}
static DEVICE_ATTR_RW(sqwfreq);

static struct attribute *attrs[] = {
	&dev_attr_flags.attr,
	&dev_attr_sqwfreq.attr,
	NULL,
};