Skip to content

Commit 6158c6b

Browse files
andredalexandrebelloni
authored andcommitted
rtc: sd3078: drop needless struct sd3078
The memory pointed to by the ::rtc member is managed via devres, and no code in this driver uses it past _probe(). We can drop it from the structure and just use a local temporary variable, reducing runtime memory consumption by a few bytes. Since this now means that the structure has just one member only left, there is no need anymore to allocate data for it and pass that around via the various callbacks, just to extract that one member. Instead, we can just pass that one member and avoid the extra memory allocation for the containing struct, reducing runtime memory consumption. Signed-off-by: André Draszik <andre.draszik@linaro.org> Link: https://lore.kernel.org/r/20250304-rtc-cleanups-v2-14-d4689a71668c@linaro.org Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
1 parent d94bc2b commit 6158c6b

1 file changed

Lines changed: 28 additions & 43 deletions

File tree

drivers/rtc/rtc-sd3078.c

Lines changed: 28 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,6 @@
3636
*/
3737
#define WRITE_PROTECT_EN 0
3838

39-
struct sd3078 {
40-
struct rtc_device *rtc;
41-
struct regmap *regmap;
42-
};
43-
4439
/*
4540
* In order to prevent arbitrary modification of the time register,
4641
* when modification of the register,
@@ -49,14 +44,11 @@ struct sd3078 {
4944
* 2. set WRITE2 bit
5045
* 3. set WRITE3 bit
5146
*/
52-
static void sd3078_enable_reg_write(struct sd3078 *sd3078)
47+
static void sd3078_enable_reg_write(struct regmap *regmap)
5348
{
54-
regmap_update_bits(sd3078->regmap, SD3078_REG_CTRL2,
55-
KEY_WRITE1, KEY_WRITE1);
56-
regmap_update_bits(sd3078->regmap, SD3078_REG_CTRL1,
57-
KEY_WRITE2, KEY_WRITE2);
58-
regmap_update_bits(sd3078->regmap, SD3078_REG_CTRL1,
59-
KEY_WRITE3, KEY_WRITE3);
49+
regmap_update_bits(regmap, SD3078_REG_CTRL2, KEY_WRITE1, KEY_WRITE1);
50+
regmap_update_bits(regmap, SD3078_REG_CTRL1, KEY_WRITE2, KEY_WRITE2);
51+
regmap_update_bits(regmap, SD3078_REG_CTRL1, KEY_WRITE3, KEY_WRITE3);
6052
}
6153

6254
#if WRITE_PROTECT_EN
@@ -69,14 +61,11 @@ static void sd3078_enable_reg_write(struct sd3078 *sd3078)
6961
* 2. clear WRITE3 bit
7062
* 3. clear WRITE1 bit
7163
*/
72-
static void sd3078_disable_reg_write(struct sd3078 *sd3078)
64+
static void sd3078_disable_reg_write(struct regmap *regmap)
7365
{
74-
regmap_update_bits(sd3078->regmap, SD3078_REG_CTRL1,
75-
KEY_WRITE2, 0);
76-
regmap_update_bits(sd3078->regmap, SD3078_REG_CTRL1,
77-
KEY_WRITE3, 0);
78-
regmap_update_bits(sd3078->regmap, SD3078_REG_CTRL2,
79-
KEY_WRITE1, 0);
66+
regmap_update_bits(regmap, SD3078_REG_CTRL1, KEY_WRITE2, 0);
67+
regmap_update_bits(regmap, SD3078_REG_CTRL1, KEY_WRITE3, 0);
68+
regmap_update_bits(regmap, SD3078_REG_CTRL2, KEY_WRITE1, 0);
8069
}
8170
#endif
8271

@@ -85,11 +74,10 @@ static int sd3078_rtc_read_time(struct device *dev, struct rtc_time *tm)
8574
unsigned char hour;
8675
unsigned char rtc_data[NUM_TIME_REGS] = {0};
8776
struct i2c_client *client = to_i2c_client(dev);
88-
struct sd3078 *sd3078 = i2c_get_clientdata(client);
77+
struct regmap *regmap = i2c_get_clientdata(client);
8978
int ret;
9079

91-
ret = regmap_bulk_read(sd3078->regmap, SD3078_REG_SC, rtc_data,
92-
NUM_TIME_REGS);
80+
ret = regmap_bulk_read(regmap, SD3078_REG_SC, rtc_data, NUM_TIME_REGS);
9381
if (ret < 0) {
9482
dev_err(dev, "reading from RTC failed with err:%d\n", ret);
9583
return ret;
@@ -123,7 +111,7 @@ static int sd3078_rtc_set_time(struct device *dev, struct rtc_time *tm)
123111
{
124112
unsigned char rtc_data[NUM_TIME_REGS];
125113
struct i2c_client *client = to_i2c_client(dev);
126-
struct sd3078 *sd3078 = i2c_get_clientdata(client);
114+
struct regmap *regmap = i2c_get_clientdata(client);
127115
int ret;
128116

129117
rtc_data[SD3078_REG_SC] = bin2bcd(tm->tm_sec);
@@ -135,18 +123,18 @@ static int sd3078_rtc_set_time(struct device *dev, struct rtc_time *tm)
135123
rtc_data[SD3078_REG_YR] = bin2bcd(tm->tm_year - 100);
136124

137125
#if WRITE_PROTECT_EN
138-
sd3078_enable_reg_write(sd3078);
126+
sd3078_enable_reg_write(regmap);
139127
#endif
140128

141-
ret = regmap_bulk_write(sd3078->regmap, SD3078_REG_SC, rtc_data,
129+
ret = regmap_bulk_write(regmap, SD3078_REG_SC, rtc_data,
142130
NUM_TIME_REGS);
143131
if (ret < 0) {
144132
dev_err(dev, "writing to RTC failed with err:%d\n", ret);
145133
return ret;
146134
}
147135

148136
#if WRITE_PROTECT_EN
149-
sd3078_disable_reg_write(sd3078);
137+
sd3078_disable_reg_write(regmap);
150138
#endif
151139

152140
return 0;
@@ -166,36 +154,33 @@ static const struct regmap_config regmap_config = {
166154
static int sd3078_probe(struct i2c_client *client)
167155
{
168156
int ret;
169-
struct sd3078 *sd3078;
157+
struct regmap *regmap;
158+
struct rtc_device *rtc;
170159

171160
if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
172161
return -ENODEV;
173162

174-
sd3078 = devm_kzalloc(&client->dev, sizeof(*sd3078), GFP_KERNEL);
175-
if (!sd3078)
176-
return -ENOMEM;
177-
178-
sd3078->regmap = devm_regmap_init_i2c(client, &regmap_config);
179-
if (IS_ERR(sd3078->regmap)) {
163+
regmap = devm_regmap_init_i2c(client, &regmap_config);
164+
if (IS_ERR(regmap)) {
180165
dev_err(&client->dev, "regmap allocation failed\n");
181-
return PTR_ERR(sd3078->regmap);
166+
return PTR_ERR(regmap);
182167
}
183168

184-
i2c_set_clientdata(client, sd3078);
169+
i2c_set_clientdata(client, regmap);
185170

186-
sd3078->rtc = devm_rtc_allocate_device(&client->dev);
187-
if (IS_ERR(sd3078->rtc))
188-
return PTR_ERR(sd3078->rtc);
171+
rtc = devm_rtc_allocate_device(&client->dev);
172+
if (IS_ERR(rtc))
173+
return PTR_ERR(rtc);
189174

190-
sd3078->rtc->ops = &sd3078_rtc_ops;
191-
sd3078->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
192-
sd3078->rtc->range_max = RTC_TIMESTAMP_END_2099;
175+
rtc->ops = &sd3078_rtc_ops;
176+
rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
177+
rtc->range_max = RTC_TIMESTAMP_END_2099;
193178

194-
ret = devm_rtc_register_device(sd3078->rtc);
179+
ret = devm_rtc_register_device(rtc);
195180
if (ret)
196181
return ret;
197182

198-
sd3078_enable_reg_write(sd3078);
183+
sd3078_enable_reg_write(regmap);
199184

200185
return 0;
201186
}

0 commit comments

Comments
 (0)