rtc: isl12022: Get rid of unneeded private struct isl12022
Subsystems (2)
PATCH 1/5 rtc: isl12022: Get rid of unneeded private struct isl12022
First of all, the struct rtc_device pointer is kept in the managed resources, no need to keep it outside (no users in the driver).
Second, replace private struct isl12022 with a regmap.
--- drivers/rtc/rtc-isl12022.c | 56 ++++++++++++++------------------------ 1 file changed, 21 insertions(+), 35 deletions(-)
drivers/rtc/rtc-isl12022.c +21 -35
@@ -46,11 +46,6 @@static struct i2c_driver isl12022_driver; -struct isl12022 { -struct rtc_device *rtc; -struct regmap *regmap; -}; -static umode_t isl12022_hwmon_is_visible (const void *data,enum hwmon_sensor_types type,u32 attr,int channel)
@@ -67,8 +62,7 @@ static umode_t isl12022_hwmon_is_visible(const void *data,*/ static int isl12022_hwmon_read_temp (struct device *dev,long *mC) { -struct isl12022 *isl12022 =dev_get_drvdata (dev); -struct regmap *regmap = isl12022->regmap; +struct regmap *regmap =dev_get_drvdata (dev);u8 temp_buf[2 ];int temp, ret;
@@ -115,23 +109,21 @@ static const struct hwmon_chip_info isl12022_hwmon_chip_info = {static void isl12022_hwmon_register (struct device *dev) { -struct isl12022 *isl12022; +struct regmap *regmap =dev_get_drvdata (dev);struct device *hwmon;int ret;if (!IS_REACHABLE (CONFIG_HWMON ))return ; - isl12022 =dev_get_drvdata (dev); - - ret =regmap_update_bits (isl12022->regmap,ISL12022_REG_BETA , + ret =regmap_update_bits (regmap,ISL12022_REG_BETA ,ISL12022_BETA_TSE ,ISL12022_BETA_TSE );if (ret) {dev_warn (dev,"unable to enable temperature sensor\n" );return ; } - hwmon =devm_hwmon_device_register_with_info (dev,"isl12022" , isl12022, + hwmon =devm_hwmon_device_register_with_info (dev,"isl12022" , regmap, &isl12022_hwmon_chip_info,NULL );if (IS_ERR (hwmon))
@@ -144,8 +136,7 @@ static void isl12022_hwmon_register(struct device *dev)*/ static int isl12022_rtc_read_time (struct device *dev,struct rtc_time *tm) { -struct isl12022 *isl12022 =dev_get_drvdata (dev); -struct regmap *regmap = isl12022->regmap; +struct regmap *regmap =dev_get_drvdata (dev);uint8_t buf[ISL12022_REG_INT +1 ];int ret;
@@ -190,8 +181,7 @@ static int isl12022_rtc_read_time(struct device *dev, struct rtc_time *tm)static int isl12022_rtc_set_time (struct device *dev,struct rtc_time *tm) { -struct isl12022 *isl12022 =dev_get_drvdata (dev); -struct regmap *regmap = isl12022->regmap; +struct regmap *regmap =dev_get_drvdata (dev);int ret;uint8_t buf[ISL12022_REG_DW +1 ];
@@ -218,8 +208,7 @@ static int isl12022_rtc_set_time(struct device *dev, struct rtc_time *tm) buf[ISL12022_REG_DW ] = tm->tm_wday &0x07 ; -return regmap_bulk_write (isl12022->regmap,ISL12022_REG_SC , - buf,sizeof (buf)); +return regmap_bulk_write (regmap,ISL12022_REG_SC , buf,sizeof (buf)); }static const struct rtc_class_ops isl12022_rtc_ops = {
@@ -235,34 +224,31 @@ static const struct regmap_config regmap_config = {static int isl12022_probe (struct i2c_client *client) { -struct isl12022 *isl12022; +struct rtc_device *rtc; +struct regmap *regmap;if (!i2c_check_functionality (client->adapter,I2C_FUNC_I2C ))return -ENODEV ; - isl12022 =devm_kzalloc (&client->dev,sizeof (struct isl12022 ), -GFP_KERNEL ); -if (!isl12022) -return -ENOMEM ; -dev_set_drvdata (&client->dev, isl12022); - - isl12022->regmap =devm_regmap_init_i2c (client, ®map_config); -if (IS_ERR (isl12022->regmap)) { + regmap =devm_regmap_init_i2c (client, ®map_config); +if (IS_ERR (regmap)) {dev_err (&client->dev,"regmap allocation failed\n" ); -return PTR_ERR (isl12022->regmap); +return PTR_ERR (regmap); } +dev_set_drvdata (&client->dev, regmap); +isl12022_hwmon_register (&client->dev); - isl12022->rtc =devm_rtc_allocate_device (&client->dev); -if (IS_ERR (isl12022->rtc)) -return PTR_ERR (isl12022->rtc); + rtc =devm_rtc_allocate_device (&client->dev); +if (IS_ERR (rtc)) +return PTR_ERR (rtc); - isl12022->rtc->ops = &isl12022_rtc_ops; - isl12022->rtc->range_min =RTC_TIMESTAMP_BEGIN_2000 ; - isl12022->rtc->range_max =RTC_TIMESTAMP_END_2099 ; + rtc->ops = &isl12022_rtc_ops; + rtc->range_min =RTC_TIMESTAMP_BEGIN_2000 ; + rtc->range_max =RTC_TIMESTAMP_END_2099 ; -return devm_rtc_register_device (isl12022->rtc); +return devm_rtc_register_device (rtc); }#ifdef CONFIG_OF
Signature · 1 line
2.35.1
PATCH 2/5 rtc: isl12022: Explicitly use __le16 type for ISL12022_REG_TEMP_L
We are reading 10-bit value in a 16-bit register in LE format. Make this explicit by using __le16 type for it and corresponding conversion function.
--- drivers/rtc/rtc-isl12022.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
drivers/rtc/rtc-isl12022.c +5 -4
@@ -19,6 +19,8 @@#include <linux/regmap.h> #include <linux/hwmon.h> +#include <asm/byteorder.h> +/* ISL register offsets */ #define ISL12022_REG_SC 0x00#define ISL12022_REG_MN 0x01
@@ -63,17 +65,16 @@ static umode_t isl12022_hwmon_is_visible(const void *data,static int isl12022_hwmon_read_temp (struct device *dev,long *mC) {struct regmap *regmap =dev_get_drvdata (dev); -u8 temp_buf[2 ];int temp, ret; +__le16 buf; - ret =regmap_bulk_read (regmap,ISL12022_REG_TEMP_L , - temp_buf,sizeof (temp_buf)); + ret =regmap_bulk_read (regmap,ISL12022_REG_TEMP_L , &buf,sizeof (buf));if (ret)return ret;/* * Temperature is represented as a 10-bit number, unit half-Kelvins. */ - temp = (temp_buf[1 ] <<8 ) | temp_buf[0 ]; + temp =le16_to_cpu (buf); temp *=500 ; temp -=273000 ;
Signature · 1 line
2.35.1
Re: [PATCH v1 2/5] rtc: isl12022: Explicitly use __le16 type for ISL12022_REG_TEMP_L
Quoted 30 lines · Andy Shevchenko
We are reading 10-bit value in a 16-bit register in LE format. Make this explicit by using
__le16type for it and corresponding conversion function.Signed-off-by Andy Shevchenko <[email protected]>--- drivers/rtc/rtc-isl12022.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)drivers/rtc/rtc-isl12022.c +3
-1@@ -19,6 +19,8 @@#include <linux/regmap.h> #include <linux/hwmon.h> +#include <asm/byteorder.h> +/* ISL register offsets */ #define ISL12022_REG_SC 0x00#define ISL12022_REG_MN 0x01@@ -63,17 +65,16 @@ static umode_t isl12022_hwmon_is_visible(const void *data,static int isl12022_hwmon_read_temp (struct device *dev,long *mC) {struct regmap *regmap =dev_get_drvdata (dev); -u8 temp_buf[2 ];int temp, ret; +__le16 buf;
drivers/rtc/rtc-isl12022.c static umode_t isl12022_hwmon_is_visible(const void *data, · line 77
Quoted 10 lines
drivers/rtc/rtc-isl12022.c +2
-3- ret =regmap_bulk_read (regmap,ISL12022_REG_TEMP_L , - temp_buf,sizeof (temp_buf)); + ret =regmap_bulk_read (regmap,ISL12022_REG_TEMP_L , &buf,sizeof (buf));if (ret)return ret;/* * Temperature is represented as a 10-bit number, unit half-Kelvins. */ - temp = (temp_buf[1 ] <<8 ) | temp_buf[0 ]; + temp =le16_to_cpu (buf);
Makes sense. Perhaps we should throw in "& 0x3ff" just in case there were ever any garbage bits set in the temp_h register.
With or without that,
PATCH 3/5 rtc: isl12022: Drop unneeded OF guards and of_match_ptr()
In reply to Andy ShevchenkoDrop unneeded OF guards and of_match_ptr(). This allows use of the driver with other types of firmware such as ACPI PRP0001 based probing.
--- drivers/rtc/rtc-isl12022.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-)
drivers/rtc/rtc-isl12022.c +1 -9
@@ -14,8 +14,6 @@#include <linux/slab.h> #include <linux/module.h> #include <linux/err.h> -#include <linux/of.h> -#include <linux/of_device.h> #include <linux/regmap.h> #include <linux/hwmon.h>
@@ -46,8 +44,6 @@#define ISL12022_BETA_TSE (1 << 7) -static struct i2c_driver isl12022_driver; -static umode_t isl12022_hwmon_is_visible (const void *data,enum hwmon_sensor_types type,u32 attr,int channel)
@@ -252,14 +248,12 @@ static int isl12022_probe(struct i2c_client *client)return devm_rtc_register_device (rtc); } -#ifdef CONFIG_OF static const struct of_device_id isl12022_dt_match[] = { { .compatible ="isl,isl12022" },/* for backward compat., don't use */ { .compatible ="isil,isl12022" }, { }, };MODULE_DEVICE_TABLE (of, isl12022_dt_match); -#endif static const struct i2c_device_id isl12022_id[] = { {"isl12022" ,0 },
@@ -270,9 +264,7 @@ MODULE_DEVICE_TABLE(i2c, isl12022_id);static struct i2c_driver isl12022_driver = { .driver = { .name ="rtc-isl12022" , -#ifdef CONFIG_OF - .of_match_table =of_match_ptr (isl12022_dt_match), -#endif + .of_match_table = isl12022_dt_match, }, .probe_new = isl12022_probe, .id_table = isl12022_id,
Signature · 1 line
2.35.1
PATCH 4/5 rtc: isl12022: Join string literals back
In reply to Andy ShevchenkoFor easy grepping on debug purposes join string literals back in the messages.
While at it, drop __func__ parameter from unique enough dev_dbg() message as Dynamic Debug can retrieve this at run time.
--- drivers/rtc/rtc-isl12022.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
drivers/rtc/rtc-isl12022.c +2 -6
@@ -143,16 +143,12 @@ static int isl12022_rtc_read_time(struct device *dev, struct rtc_time *tm)if (buf[ISL12022_REG_SR ] & (ISL12022_SR_LBAT85 |ISL12022_SR_LBAT75 )) {dev_warn (dev, -"voltage dropped below %u%%, " -"date and time is not reliable.\n" , +"voltage dropped below %u%%, date and time is not reliable.\n" , buf[ISL12022_REG_SR ] &ISL12022_SR_LBAT85 ?85 :75 ); } dev_dbg(dev, - "%s: raw data is sec=%02x, min=%02x, hr=%02x, " - "mday=%02x, mon=%02x, year=%02x, wday=%02x, " - "sr=%02x, int=%02x", - __func__, + "raw data is sec=%02x, min=%02x, hr=%02x, mday=%02x, mon=%02x, year=%02x, wday=%02x, sr=%02x, int=%02x", buf[ISL12022_REG_SC], buf[ISL12022_REG_MN], buf[ISL12022_REG_HR],
Signature · 1 line
2.35.1
Re: [PATCH v1 4/5] rtc: isl12022: Join string literals back
Quoted 5 lines · Andy Shevchenko
For easy grepping on debug purposes join string literals back in the messages.
While at it, drop
__func__parameter from unique enoughdev_dbg()message as Dynamic Debug can retrieve this at run time.
PATCH 5/5 rtc: isl12022: sort header inclusion alphabetically
In reply to Andy ShevchenkoSort header inclusion alphabetically for better maintenance.
--- drivers/rtc/rtc-isl12022.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/rtc/rtc-isl12022.c +5 -5
@@ -8,14 +8,14 @@* by Alessandro Zummo <[email protected]>. */ -#include <linux/i2c.h> #include <linux/bcd.h> -#include <linux/rtc.h> -#include <linux/slab.h> -#include <linux/module.h> #include <linux/err.h> -#include <linux/regmap.h> #include <linux/hwmon.h> +#include <linux/i2c.h> +#include <linux/module.h> +#include <linux/regmap.h> +#include <linux/rtc.h> +#include <linux/slab.h> #include <asm/byteorder.h>
Signature · 1 line
2.35.1
Re: [PATCH v1 5/5] rtc: isl12022: sort header inclusion alphabetically
Quoted 1 line · Andy Shevchenko
Sort header inclusion alphabetically for better maintenance.
Quoted 4 lines · Andy Shevchenko
First of all, the struct
rtc_devicepointer is kept in the managed resources, no need to keep it outside (no users in the driver).Second, replace private struct isl12022 with a regmap.
Nice simplification.
Quoted 9 lines · Rasmus Villemoes
Quoted 4 lines · Andy Shevchenko
First of all, the struct
rtc_devicepointer is kept in the managed resources, no need to keep it outside (no users in the driver).Second, replace private struct isl12022 with a regmap.
Nice simplification.
Acked-by Rasmus Villemoes <[email protected]>
Thank you!
Alexandre, do you have any comments on this series? If no, can it be applied now?
Signature · 2 lines
With Best Regards, Andy Shevchenko