rtc: abx80x: Add utility function for writing configuration key
Writing one of key two values into the configuration key register is a common operation, so a utility function has been added to provide consistent behavior and eliminate code duplication. Signed-off-by: Kevin P. Fleming <kevin+linux@km6g.us> Cc: Alessandro Zummo <a.zummo@towertech.it> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com> To: linux-rtc@vger.kernel.org Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Link: https://lore.kernel.org/r/20200615105113.57770-2-kevin+linux@km6g.us
This commit is contained in:
Родитель
2843d565dd
Коммит
49dfc1f16b
|
@ -117,6 +117,16 @@ struct abx80x_priv {
|
|||
struct watchdog_device wdog;
|
||||
};
|
||||
|
||||
static int abx80x_write_config_key(struct i2c_client *client, u8 key)
|
||||
{
|
||||
if (i2c_smbus_write_byte_data(client, ABX8XX_REG_CFG_KEY, key) < 0) {
|
||||
dev_err(&client->dev, "Unable to write configuration key\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int abx80x_is_rc_mode(struct i2c_client *client)
|
||||
{
|
||||
int flags = 0;
|
||||
|
@ -140,12 +150,8 @@ static int abx80x_enable_trickle_charger(struct i2c_client *client,
|
|||
* Write the configuration key register to enable access to the Trickle
|
||||
* register
|
||||
*/
|
||||
err = i2c_smbus_write_byte_data(client, ABX8XX_REG_CFG_KEY,
|
||||
ABX8XX_CFG_KEY_MISC);
|
||||
if (err < 0) {
|
||||
dev_err(&client->dev, "Unable to write configuration key\n");
|
||||
if (abx80x_write_config_key(client, ABX8XX_CFG_KEY_MISC) < 0)
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
err = i2c_smbus_write_byte_data(client, ABX8XX_REG_TRICKLE,
|
||||
ABX8XX_TRICKLE_CHARGE_ENABLE |
|
||||
|
@ -358,12 +364,8 @@ static int abx80x_rtc_set_autocalibration(struct device *dev,
|
|||
}
|
||||
|
||||
/* Unlock write access to Oscillator Control Register */
|
||||
retval = i2c_smbus_write_byte_data(client, ABX8XX_REG_CFG_KEY,
|
||||
ABX8XX_CFG_KEY_OSC);
|
||||
if (retval < 0) {
|
||||
dev_err(dev, "Failed to write CONFIG_KEY register\n");
|
||||
return retval;
|
||||
}
|
||||
if (abx80x_write_config_key(client, ABX8XX_CFG_KEY_OSC) < 0)
|
||||
return -EIO;
|
||||
|
||||
retval = i2c_smbus_write_byte_data(client, ABX8XX_REG_OSC, flags);
|
||||
|
||||
|
@ -450,12 +452,8 @@ static ssize_t oscillator_store(struct device *dev,
|
|||
flags |= (ABX8XX_OSC_OSEL);
|
||||
|
||||
/* Unlock write access on Oscillator Control register */
|
||||
retval = i2c_smbus_write_byte_data(client, ABX8XX_REG_CFG_KEY,
|
||||
ABX8XX_CFG_KEY_OSC);
|
||||
if (retval < 0) {
|
||||
dev_err(dev, "Failed to write CONFIG_KEY register\n");
|
||||
return retval;
|
||||
}
|
||||
if (abx80x_write_config_key(client, ABX8XX_CFG_KEY_OSC) < 0)
|
||||
return -EIO;
|
||||
|
||||
retval = i2c_smbus_write_byte_data(client, ABX8XX_REG_OSC, flags);
|
||||
if (retval < 0) {
|
||||
|
@ -762,13 +760,8 @@ static int abx80x_probe(struct i2c_client *client,
|
|||
* Write the configuration key register to enable access to
|
||||
* the config2 register
|
||||
*/
|
||||
err = i2c_smbus_write_byte_data(client, ABX8XX_REG_CFG_KEY,
|
||||
ABX8XX_CFG_KEY_MISC);
|
||||
if (err < 0) {
|
||||
dev_err(&client->dev,
|
||||
"Unable to write configuration key\n");
|
||||
if (abx80x_write_config_key(client, ABX8XX_CFG_KEY_MISC) < 0)
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
err = i2c_smbus_write_byte_data(client, ABX8XX_REG_OUT_CTRL,
|
||||
data | ABX8XX_OUT_CTRL_EXDS);
|
||||
|
|
Загрузка…
Ссылка в новой задаче