Commit 559e883e authored by Alexandre Belloni's avatar Alexandre Belloni
Browse files

rtc: abx80x: use rtc_add_group



Use rtc_add_group to add the sysfs group in a race free manner.
This has the side effect of moving the files to their proper location.

Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
parent 2fcdf5fd
Loading
Loading
Loading
Loading
+6 −26
Original line number Diff line number Diff line
@@ -401,7 +401,7 @@ static ssize_t autocalibration_store(struct device *dev,
		return -EINVAL;
	}

	retval = abx80x_rtc_set_autocalibration(dev, autocalibration);
	retval = abx80x_rtc_set_autocalibration(dev->parent, autocalibration);

	return retval ? retval : count;
}
@@ -411,7 +411,7 @@ static ssize_t autocalibration_show(struct device *dev,
{
	int autocalibration = 0;

	autocalibration = abx80x_rtc_get_autocalibration(dev);
	autocalibration = abx80x_rtc_get_autocalibration(dev->parent);
	if (autocalibration < 0) {
		dev_err(dev, "Failed to read RTC autocalibration\n");
		sprintf(buf, "0\n");
@@ -427,7 +427,7 @@ static ssize_t oscillator_store(struct device *dev,
				struct device_attribute *attr,
				const char *buf, size_t count)
{
	struct i2c_client *client = to_i2c_client(dev);
	struct i2c_client *client = to_i2c_client(dev->parent);
	int retval, flags, rc_mode = 0;

	if (strncmp(buf, "rc", 2) == 0) {
@@ -469,7 +469,7 @@ static ssize_t oscillator_show(struct device *dev,
			       struct device_attribute *attr, char *buf)
{
	int rc_mode = 0;
	struct i2c_client *client = to_i2c_client(dev);
	struct i2c_client *client = to_i2c_client(dev->parent);

	rc_mode = abx80x_is_rc_mode(client);

@@ -589,13 +589,6 @@ static int abx80x_dt_trickle_cfg(struct device_node *np)
	return (trickle_cfg | i);
}

static void rtc_calib_remove_sysfs_group(void *_dev)
{
	struct device *dev = _dev;

	sysfs_remove_group(&dev->kobj, &rtc_calib_attr_group);
}

#ifdef CONFIG_WATCHDOG

static inline u8 timeout_bits(unsigned int timeout)
@@ -848,27 +841,14 @@ static int abx80x_probe(struct i2c_client *client,
		}
	}

	/* Export sysfs entries */
	err = sysfs_create_group(&(&client->dev)->kobj, &rtc_calib_attr_group);
	err = rtc_add_group(priv->rtc, &rtc_calib_attr_group);
	if (err) {
		dev_err(&client->dev, "Failed to create sysfs group: %d\n",
			err);
		return err;
	}

	err = devm_add_action_or_reset(&client->dev,
				       rtc_calib_remove_sysfs_group,
				       &client->dev);
	if (err) {
		dev_err(&client->dev,
			"Failed to add sysfs cleanup action: %d\n",
			err);
		return err;
	}

	err = rtc_register_device(priv->rtc);

	return err;
	return rtc_register_device(priv->rtc);
}

static int abx80x_remove(struct i2c_client *client)