Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

power: supply: bq24190_charger: Fix "initializer element is not constant" error

When building with a version of GCC prior to 8.x, there is an error
around non-constant initializer elements:

drivers/power/supply/bq24190_charger.c:1978:16: error: initializer element is not constant
.vbus_desc = bq24190_vbus_desc,
^~~~~~~~~~~~~~~~~
drivers/power/supply/bq24190_charger.c:1978:16: note: (near initialization for 'bq24190_chip_info_tbl[0].vbus_desc')
drivers/power/supply/bq24190_charger.c:1989:16: error: initializer element is not constant
.vbus_desc = bq24190_vbus_desc,
^~~~~~~~~~~~~~~~~
drivers/power/supply/bq24190_charger.c:1989:16: note: (near initialization for 'bq24190_chip_info_tbl[1].vbus_desc')
drivers/power/supply/bq24190_charger.c:2000:16: error: initializer element is not constant
.vbus_desc = bq24190_vbus_desc,
^~~~~~~~~~~~~~~~~
drivers/power/supply/bq24190_charger.c:2000:16: note: (near initialization for 'bq24190_chip_info_tbl[2].vbus_desc')
drivers/power/supply/bq24190_charger.c:2011:16: error: initializer element is not constant
.vbus_desc = bq24190_vbus_desc,
^~~~~~~~~~~~~~~~~
drivers/power/supply/bq24190_charger.c:2011:16: note: (near initialization for 'bq24190_chip_info_tbl[3].vbus_desc')
drivers/power/supply/bq24190_charger.c:2022:16: error: initializer element is not constant
.vbus_desc = bq24296_vbus_desc,
^~~~~~~~~~~~~~~~~
drivers/power/supply/bq24190_charger.c:2022:16: note: (near initialization for 'bq24190_chip_info_tbl[4].vbus_desc')

Clang versions prior to 17.x show a similar error:

drivers/power/supply/bq24190_charger.c:1978:16: error: initializer element is not a compile-time constant
.vbus_desc = bq24190_vbus_desc,
^~~~~~~~~~~~~~~~~
1 error generated.

Newer compilers have decided to accept these structures as compile time
constants as an extension. To resolve this issue for all supported
compilers, change the vbus_desc member in 'struct bq24190_chip_info' to
a pointer, as it is only ever passed by reference anyways, and adjust
the assignments accordingly.

Closes: https://github.com/ClangBuiltLinux/linux/issues/1973
Fixes: b150a703b56f ("power: supply: bq24190_charger: Add support for BQ24296")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Reviewed-by: Justin Stitt <justinstitt@google.com>
Link: https://lore.kernel.org/r/20240103-fix-bq24190_charger-vbus_desc-non-const-v1-1-115ddf798c70@kernel.org
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>

authored by

Nathan Chancellor and committed by
Sebastian Reichel
17d49b7e 05599b5f

+7 -7
+7 -7
drivers/power/supply/bq24190_charger.c
··· 246 246 struct bq24190_chip_info { 247 247 int ichg_array_size; 248 248 #ifdef CONFIG_REGULATOR 249 - const struct regulator_desc vbus_desc; 249 + const struct regulator_desc *vbus_desc; 250 250 #endif 251 251 int (*check_chip)(struct bq24190_dev_info *bdi); 252 252 int (*set_chg_config)(struct bq24190_dev_info *bdi, const u8 chg_config); ··· 728 728 else 729 729 cfg.init_data = &bq24190_vbus_init_data; 730 730 cfg.driver_data = bdi; 731 - reg = devm_regulator_register(bdi->dev, &bdi->info->vbus_desc, &cfg); 731 + reg = devm_regulator_register(bdi->dev, bdi->info->vbus_desc, &cfg); 732 732 if (IS_ERR(reg)) { 733 733 ret = PTR_ERR(reg); 734 734 dev_err(bdi->dev, "Can't register regulator: %d\n", ret); ··· 1975 1975 [BQ24190] = { 1976 1976 .ichg_array_size = ARRAY_SIZE(bq24190_ccc_ichg_values), 1977 1977 #ifdef CONFIG_REGULATOR 1978 - .vbus_desc = bq24190_vbus_desc, 1978 + .vbus_desc = &bq24190_vbus_desc, 1979 1979 #endif 1980 1980 .check_chip = bq24190_check_chip, 1981 1981 .set_chg_config = bq24190_battery_set_chg_config, ··· 1986 1986 [BQ24192] = { 1987 1987 .ichg_array_size = ARRAY_SIZE(bq24190_ccc_ichg_values), 1988 1988 #ifdef CONFIG_REGULATOR 1989 - .vbus_desc = bq24190_vbus_desc, 1989 + .vbus_desc = &bq24190_vbus_desc, 1990 1990 #endif 1991 1991 .check_chip = bq24190_check_chip, 1992 1992 .set_chg_config = bq24190_battery_set_chg_config, ··· 1997 1997 [BQ24192i] = { 1998 1998 .ichg_array_size = ARRAY_SIZE(bq24190_ccc_ichg_values), 1999 1999 #ifdef CONFIG_REGULATOR 2000 - .vbus_desc = bq24190_vbus_desc, 2000 + .vbus_desc = &bq24190_vbus_desc, 2001 2001 #endif 2002 2002 .check_chip = bq24190_check_chip, 2003 2003 .set_chg_config = bq24190_battery_set_chg_config, ··· 2008 2008 [BQ24196] = { 2009 2009 .ichg_array_size = ARRAY_SIZE(bq24190_ccc_ichg_values), 2010 2010 #ifdef CONFIG_REGULATOR 2011 - .vbus_desc = bq24190_vbus_desc, 2011 + .vbus_desc = &bq24190_vbus_desc, 2012 2012 #endif 2013 2013 .check_chip = bq24190_check_chip, 2014 2014 .set_chg_config = bq24190_battery_set_chg_config, ··· 2019 2019 [BQ24296] = { 2020 2020 .ichg_array_size = BQ24296_CCC_ICHG_VALUES_LEN, 2021 2021 #ifdef CONFIG_REGULATOR 2022 - .vbus_desc = bq24296_vbus_desc, 2022 + .vbus_desc = &bq24296_vbus_desc, 2023 2023 #endif 2024 2024 .check_chip = bq24296_check_chip, 2025 2025 .set_chg_config = bq24296_battery_set_chg_config,