eeprom: at24: code shrink
Subsystems (2)
PATCH 1/1 eeprom: at24: code shrink
A regmap_config struct is pretty big and declaring two of them statically just to tweak the reg_bits value adds unnecessary bloat.
Declare the regmap config locally in at24_probe() instead.
Bloat-o-meter output:
add/remove: 0/2 grow/shrink: 1/0 up/down: 20/-272 (-252)
Function old new deltaat24_probe 1564 1584 +20
regmap_config_8 136 - -136 regmap_config_16 136 - -136
Total: Before=7010, After=6758, chg -3.59%
--- drivers/misc/eeprom/at24.c | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-)
drivers/misc/eeprom/at24.c +6 -21
@@ -518,20 +518,6 @@ static void at24_regmap_lock_unlock_none(void *map) } -static const struct regmap_config regmap_config_8 = { - .reg_bits =8 , - .val_bits =8 , - .lock = at24_regmap_lock_unlock_none, - .unlock = at24_regmap_lock_unlock_none, -}; - -static const struct regmap_config regmap_config_16 = { - .reg_bits =16 , - .val_bits =8 , - .lock = at24_regmap_lock_unlock_none, - .unlock = at24_regmap_lock_unlock_none, -}; -static int at24_probe (struct i2c_client *client,const struct i2c_device_id *id) {struct at24_platform_data chip;
@@ -540,7 +526,7 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id)struct at24_data *at24;int err;unsigned i, num_addresses; -const struct regmap_config *config; +struct regmap_config config = { };u8 test_byte;if (client->dev.platform_data) {
@@ -609,10 +595,9 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) num_addresses =DIV_ROUND_UP (chip.byte_len, (chip.flags &AT24_FLAG_ADDR16 ) ?65536 :256 ); -if (chip.flags &AT24_FLAG_ADDR16 ) - config = ®map_config_16; -else - config = ®map_config_8; + config.val_bits =8 ; + config.lock = config.unlock = at24_regmap_lock_unlock_none; + config.reg_bits = (chip.flags &AT24_FLAG_ADDR16 ) ?16 :8 ; at24 =devm_kzalloc (&client->dev,sizeof (struct at24_data ) + num_addresses *sizeof (struct at24_client ),GFP_KERNEL );
@@ -625,7 +610,7 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) at24->offset_adj =at24_get_offset_adj (chip.flags, chip.byte_len); at24->client[0 ].client = client; - at24->client[0 ].regmap =devm_regmap_init_i2c (client, config); + at24->client[0 ].regmap =devm_regmap_init_i2c (client, &config);if (IS_ERR (at24->client[0 ].regmap))return PTR_ERR (at24->client[0 ].regmap);
@@ -654,7 +639,7 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) goto err_clients; } at24->client[i].regmap =devm_regmap_init_i2c ( - at24->client[i].client, config); + at24->client[i].client, &config);if (IS_ERR (at24->client[i].regmap)) { err =PTR_ERR (at24->client[i].regmap); goto err_clients;
Signature · 1 line
2.15.1
Hello,
drivers/misc/eeprom/at24.c static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) · line 616
Quoted 9 lines · Bartosz Golaszewski
drivers/misc/eeprom/at24.c +1
-1@@ -625,7 +610,7 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) at24->offset_adj =at24_get_offset_adj (chip.flags, chip.byte_len); at24->client[0 ].client = client; - at24->client[0 ].regmap =devm_regmap_init_i2c (client, config); + at24->client[0 ].regmap =devm_regmap_init_i2c (client, &config);if (IS_ERR (at24->client[0 ].regmap))return PTR_ERR (at24->client[0 ].regmap);
One side effect here that the lockdep name changes from (unhelpful) "config" to (unhelpful and ugly) "&config". Probably doesn't matter much
...
Best regards
Uwe
Signature · 2 lines
Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | http://www.pengutronix.de/ |
2017-12-11 9:08 GMT+01:00 Uwe Kleine-König <[email protected]>:
Quoted 17 lines
Hello,
drivers/misc/eeprom/at24.c static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) · line 616
Quoted 9 lines · Bartosz Golaszewski
drivers/misc/eeprom/at24.c +1
-1@@ -625,7 +610,7 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) at24->offset_adj =at24_get_offset_adj (chip.flags, chip.byte_len); at24->client[0 ].client = client; - at24->client[0 ].regmap =devm_regmap_init_i2c (client, config); + at24->client[0 ].regmap =devm_regmap_init_i2c (client, &config);if (IS_ERR (at24->client[0 ].regmap))return PTR_ERR (at24->client[0 ].regmap);One side effect here that the lockdep name changes from (unhelpful) "config" to (unhelpful and ugly) "&config". Probably doesn't matter much
...
Quoted 3 lines
Best regards
Uwe
We can always rename the variable to regmap_config or smth, but in case of a lockdep splat we'll see the stack trace anyway.
Thanks,
Bartosz
2017-12-10 20:29 GMT+01:00 Bartosz Golaszewski <[email protected]>:
Quoted 86 lines
A
regmap_configstruct is pretty big and declaring two of them statically just to tweak thereg_bitsvalue adds unnecessary bloat.Declare the regmap config locally in
at24_probe()instead.Bloat-o-meter output:
add/remove: 0/2 grow/shrink: 1/0 up/down: 20/-272 (-252)
Function old new deltaat24_probe1564 1584 +20regmap_config_8 136 - -136 regmap_config_16 136 - -136Total: Before=7010, After=6758, chg -3.59%
Signed-off-by Bartosz Golaszewski <[email protected]>--- drivers/misc/eeprom/at24.c | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-)drivers/misc/eeprom/at24.c +6
-22@@ -518,20 +518,6 @@ static void at24_regmap_lock_unlock_none(void *map) } -static const struct regmap_config regmap_config_8 = { - .reg_bits =8 , - .val_bits =8 , - .lock = at24_regmap_lock_unlock_none, - .unlock = at24_regmap_lock_unlock_none, -}; - -static const struct regmap_config regmap_config_16 = { - .reg_bits =16 , - .val_bits =8 , - .lock = at24_regmap_lock_unlock_none, - .unlock = at24_regmap_lock_unlock_none, -}; -static int at24_probe (struct i2c_client *client,const struct i2c_device_id *id) {struct at24_platform_data chip;@@ -540,7 +526,7 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id)struct at24_data *at24;int err;unsigned i, num_addresses; -const struct regmap_config *config; +struct regmap_config config = { };u8 test_byte;if (client->dev.platform_data) {@@ -609,10 +595,9 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) num_addresses =DIV_ROUND_UP (chip.byte_len, (chip.flags &AT24_FLAG_ADDR16 ) ?65536 :256 ); -if (chip.flags &AT24_FLAG_ADDR16 ) - config = ®map_config_16; -else - config = ®map_config_8; + config.val_bits =8 ; + config.lock = config.unlock = at24_regmap_lock_unlock_none; + config.reg_bits = (chip.flags &AT24_FLAG_ADDR16 ) ?16 :8 ; at24 =devm_kzalloc (&client->dev,sizeof (struct at24_data ) + num_addresses *sizeof (struct at24_client ),GFP_KERNEL );@@ -625,7 +610,7 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) at24->offset_adj =at24_get_offset_adj (chip.flags, chip.byte_len); at24->client[0 ].client = client; - at24->client[0 ].regmap =devm_regmap_init_i2c (client, config); + at24->client[0 ].regmap =devm_regmap_init_i2c (client, &config);if (IS_ERR (at24->client[0 ].regmap))return PTR_ERR (at24->client[0 ].regmap);@@ -654,7 +639,7 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) goto err_clients; } at24->client[i].regmap =devm_regmap_init_i2c ( - at24->client[i].client, config); + at24->client[i].client, &config);if (IS_ERR (at24->client[i].regmap)) { err =PTR_ERR (at24->client[i].regmap); goto err_clients; --
Quoted 2 lines
2.15.1
There were no more comments, so patch applied.