Re: [PATCH v5 5/8] power: bq27xxx_battery: Add power_supply_battery_info support
From: kbuild test robot <hidden>
Date: 2017-02-04 09:42:57
Hi Matt, [auto build test ERROR on next-20170203] [cannot apply to battery/master linus/master linux/master v4.9-rc8 v4.9-rc7 v4.9-rc6 v4.10-rc6] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Liam-Breck/Devicetree-battery-support-and-client-bq27xxx_battery/20170204-172332 config: i386-randconfig-x004-201705 (attached as .config) compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901 reproduce: # save the attached .config to linux build tree make ARCH=i386 Note: the linux-review/Liam-Breck/Devicetree-battery-support-and-client-bq27xxx_battery/20170204-172332 HEAD 26caaa850a9e06e4d96ba05e9bff37ca03531973 builds fine. It only hurts bisectibility. All error/warnings (new ones prefixed by >>):
quoted
drivers/power/supply/bq27xxx_battery.c:802:3: error: 'BQ27425' undeclared here (not in a function)
[BQ27425] = bq27425_dm_subclass_regs,
^~~~~~~quoted
drivers/power/supply/bq27xxx_battery.c:802:3: error: array index in initializer not of integer type
drivers/power/supply/bq27xxx_battery.c:802:3: note: (near initialization for 'bq27xxx_dm_subclass_regs')
drivers/power/supply/bq27xxx_battery.c:806:3: error: array index in initializer not of integer type
[BQ27425] = 0x04143672,
^~~~~~~
drivers/power/supply/bq27xxx_battery.c:806:3: note: (near initialization for 'bq27xxx_unseal_keys')
drivers/power/supply/bq27xxx_battery.c: In function 'bq27xxx_battery_set_seal_state':quoted
drivers/power/supply/bq27xxx_battery.c:860:17: error: 'struct bq27xxx_access_methods' has no member named 'write'
return di->bus.write(di, BQ27XXX_REG_CTRL, 0x20, false);
^
drivers/power/supply/bq27xxx_battery.c:862:15: error: 'struct bq27xxx_access_methods' has no member named 'write'
ret = di->bus.write(di, BQ27XXX_REG_CTRL, (key >> 16) & 0xffff, false);
^
drivers/power/supply/bq27xxx_battery.c:866:16: error: 'struct bq27xxx_access_methods' has no member named 'write'
return di->bus.write(di, BQ27XXX_REG_CTRL, key & 0xffff, false);
^
drivers/power/supply/bq27xxx_battery.c: In function 'bq27xxx_battery_read_dm_block':
drivers/power/supply/bq27xxx_battery.c:872:19: error: 'struct bq27xxx_access_methods' has no member named 'write'
int ret = di->bus.write(di, BQ27XXX_REG_CTRL, 0, false);
^
drivers/power/supply/bq27xxx_battery.c:877:15: error: 'struct bq27xxx_access_methods' has no member named 'write'
ret = di->bus.write(di, BQ27XXX_BLOCK_DATA_CONTROL, 0, true);
^
drivers/power/supply/bq27xxx_battery.c:881:15: error: 'struct bq27xxx_access_methods' has no member named 'write'
ret = di->bus.write(di, BQ27XXX_BLOCK_DATA_CLASS, subclass, true);
^
drivers/power/supply/bq27xxx_battery.c:885:15: error: 'struct bq27xxx_access_methods' has no member named 'write'
ret = di->bus.write(di, BQ27XXX_DATA_BLOCK, 0, true);
^quoted
drivers/power/supply/bq27xxx_battery.c:891:16: error: 'struct bq27xxx_access_methods' has no member named 'read_bulk'
return di->bus.read_bulk(di, BQ27XXX_BLOCK_DATA,
^
drivers/power/supply/bq27xxx_battery.c: In function 'bq27xxx_battery_write_nvram':
drivers/power/supply/bq27xxx_battery.c:954:15: error: 'struct bq27xxx_access_methods' has no member named 'write'
ret = di->bus.write(di, BQ27XXX_REG_CTRL, BQ27XXX_SET_CFGUPDATE, false);
^
drivers/power/supply/bq27xxx_battery.c:958:15: error: 'struct bq27xxx_access_methods' has no member named 'write'
ret = di->bus.write(di, BQ27XXX_BLOCK_DATA_CONTROL, 0, true);
^
drivers/power/supply/bq27xxx_battery.c:962:15: error: 'struct bq27xxx_access_methods' has no member named 'write'
ret = di->bus.write(di, BQ27XXX_BLOCK_DATA_CLASS, subclass, true);
^
drivers/power/supply/bq27xxx_battery.c:966:15: error: 'struct bq27xxx_access_methods' has no member named 'write'
ret = di->bus.write(di, BQ27XXX_DATA_BLOCK, 0, true);
^quoted
drivers/power/supply/bq27xxx_battery.c:970:15: error: 'struct bq27xxx_access_methods' has no member named 'write_bulk'
ret = di->bus.write_bulk(di, BQ27XXX_BLOCK_DATA,
^
drivers/power/supply/bq27xxx_battery.c:977:9: error: 'struct bq27xxx_access_methods' has no member named 'write'
di->bus.write(di, BQ27XXX_BLOCK_DATA_CHECKSUM,
^
drivers/power/supply/bq27xxx_battery.c:982:9: error: 'struct bq27xxx_access_methods' has no member named 'write'
di->bus.write(di, BQ27XXX_REG_CTRL, BQ27XXX_SOFT_RESET, false);
^
In file included from include/linux/linkage.h:4:0,
from include/linux/kernel.h:6,
from include/linux/delay.h:21,
from drivers/power/supply/bq27xxx_battery.c:46:
drivers/power/supply/bq27xxx_battery.c: In function 'bq27xxx_battery_settings':
drivers/power/supply/bq27xxx_battery.c:1299:14: error: 'struct bq27xxx_access_methods' has no member named 'write'
if (!di->bus.write || !di->bus.write_bulk)
^
include/linux/compiler.h:160:30: note: in definition of macro '__trace_if'
if (__builtin_constant_p(!!(cond)) ? !!(cond) : \
^~~~quoted
drivers/power/supply/bq27xxx_battery.c:1299:2: note: in expansion of macro 'if'
if (!di->bus.write || !di->bus.write_bulk)
^~
drivers/power/supply/bq27xxx_battery.c:1299:32: error: 'struct bq27xxx_access_methods' has no member named 'write_bulk'
if (!di->bus.write || !di->bus.write_bulk)
^
include/linux/compiler.h:160:30: note: in definition of macro '__trace_if'
if (__builtin_constant_p(!!(cond)) ? !!(cond) : \
^~~~quoted
drivers/power/supply/bq27xxx_battery.c:1299:2: note: in expansion of macro 'if'
if (!di->bus.write || !di->bus.write_bulk)
^~
drivers/power/supply/bq27xxx_battery.c:1299:14: error: 'struct bq27xxx_access_methods' has no member named 'write'
if (!di->bus.write || !di->bus.write_bulk)
^
include/linux/compiler.h:160:42: note: in definition of macro '__trace_if'
if (__builtin_constant_p(!!(cond)) ? !!(cond) : \
^~~~quoted
drivers/power/supply/bq27xxx_battery.c:1299:2: note: in expansion of macro 'if'
if (!di->bus.write || !di->bus.write_bulk)
^~
drivers/power/supply/bq27xxx_battery.c:1299:32: error: 'struct bq27xxx_access_methods' has no member named 'write_bulk'
if (!di->bus.write || !di->bus.write_bulk)
^
include/linux/compiler.h:160:42: note: in definition of macro '__trace_if'
if (__builtin_constant_p(!!(cond)) ? !!(cond) : \
^~~~quoted
drivers/power/supply/bq27xxx_battery.c:1299:2: note: in expansion of macro 'if'
if (!di->bus.write || !di->bus.write_bulk)
^~
drivers/power/supply/bq27xxx_battery.c:1299:14: error: 'struct bq27xxx_access_methods' has no member named 'write'
if (!di->bus.write || !di->bus.write_bulk)
^
include/linux/compiler.h:171:16: note: in definition of macro '__trace_if'
______r = !!(cond); \
^~~~quoted
drivers/power/supply/bq27xxx_battery.c:1299:2: note: in expansion of macro 'if'
if (!di->bus.write || !di->bus.write_bulk)
^~
drivers/power/supply/bq27xxx_battery.c:1299:32: error: 'struct bq27xxx_access_methods' has no member named 'write_bulk'
if (!di->bus.write || !di->bus.write_bulk)
^
include/linux/compiler.h:171:16: note: in definition of macro '__trace_if'
______r = !!(cond); \
^~~~quoted
drivers/power/supply/bq27xxx_battery.c:1299:2: note: in expansion of macro 'if'
if (!di->bus.write || !di->bus.write_bulk)
^~
drivers/power/supply/bq27xxx_battery.c: In function 'bq27xxx_battery_read_dm_block':quoted
drivers/power/supply/bq27xxx_battery.c:893:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
drivers/power/supply/bq27xxx_battery.c: In function 'bq27xxx_battery_set_seal_state':
drivers/power/supply/bq27xxx_battery.c:867:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
vim +/BQ27425 +802 drivers/power/supply/bq27xxx_battery.c
796 { BQ27XXX_GAS_GAUGING_STATE_SUBCLASS, 18, "terminate-voltage" },
797 [BQ27XXX_DM_V_AT_CHARGE_TERM] =
798 { BQ27XXX_GAS_GAUGING_STATE_SUBCLASS, 36, "v-at-charge-termination" },
799 };
800
801 static struct bq27xxx_dm_regs *bq27xxx_dm_subclass_regs[] = {
> 802 [BQ27425] = bq27425_dm_subclass_regs,
803 };
804
805 static unsigned int bq27xxx_unseal_keys[] = {
806 [BQ27425] = 0x04143672,
807 };
808
809 static int poll_interval_param_set(const char *val, const struct kernel_param *kp)
810 {
811 struct bq27xxx_device_info *di;
812 unsigned int prev_val = *(unsigned int *) kp->arg;
813 int ret;
814
815 ret = param_set_uint(val, kp);
816 if (ret < 0 || prev_val == *(unsigned int *) kp->arg)
817 return ret;
818
819 mutex_lock(&bq27xxx_list_lock);
820 list_for_each_entry(di, &bq27xxx_battery_devices, list) {
821 cancel_delayed_work_sync(&di->work);
822 schedule_delayed_work(&di->work, 0);
823 }
824 mutex_unlock(&bq27xxx_list_lock);
825
826 return ret;
827 }
828
829 static const struct kernel_param_ops param_ops_poll_interval = {
830 .get = param_get_uint,
831 .set = poll_interval_param_set,
832 };
833
834 static unsigned int poll_interval = 360;
835 module_param_cb(poll_interval, ¶m_ops_poll_interval, &poll_interval, 0644);
836 MODULE_PARM_DESC(poll_interval,
837 "battery poll interval in seconds - 0 disables polling");
838
839 /*
840 * Common code for BQ27xxx devices
841 */
842
843 static inline int bq27xxx_read(struct bq27xxx_device_info *di, int reg_index,
844 bool single)
845 {
846 /* Reports EINVAL for invalid/missing registers */
847 if (!di || di->regs[reg_index] == INVALID_REG_ADDR)
848 return -EINVAL;
849
850 return di->bus.read(di, di->regs[reg_index], single);
851 }
852
853 static int bq27xxx_battery_set_seal_state(struct bq27xxx_device_info *di,
854 bool state)
855 {
856 unsigned int key = bq27xxx_unseal_keys[di->chip];
857 int ret;
858
859 if (state)
> 860 return di->bus.write(di, BQ27XXX_REG_CTRL, 0x20, false);
861
862 ret = di->bus.write(di, BQ27XXX_REG_CTRL, (key >> 16) & 0xffff, false);
863 if (ret < 0)
864 return ret;
865
866 return di->bus.write(di, BQ27XXX_REG_CTRL, key & 0xffff, false);
867 }
868
869 static int bq27xxx_battery_read_dm_block(struct bq27xxx_device_info *di,
870 int subclass)
871 {
872 int ret = di->bus.write(di, BQ27XXX_REG_CTRL, 0, false);
873
874 if (ret < 0)
875 return ret;
876
> 877 ret = di->bus.write(di, BQ27XXX_BLOCK_DATA_CONTROL, 0, true);
878 if (ret < 0)
879 return ret;
880
881 ret = di->bus.write(di, BQ27XXX_BLOCK_DATA_CLASS, subclass, true);
882 if (ret < 0)
883 return ret;
884
885 ret = di->bus.write(di, BQ27XXX_DATA_BLOCK, 0, true);
886 if (ret < 0)
887 return ret;
888
889 usleep_range(1000, 1500);
890
> 891 return di->bus.read_bulk(di, BQ27XXX_BLOCK_DATA,
892 (u8 *) &di->buffer, sizeof(di->buffer));
> 893 }
894
895 static int bq27xxx_battery_print_config(struct bq27xxx_device_info *di)
896 {
897 struct bq27xxx_dm_regs *reg = bq27xxx_dm_subclass_regs[di->chip];
898 int ret, i;
899
900 ret = bq27xxx_battery_read_dm_block(di,
901 BQ27XXX_GAS_GAUGING_STATE_SUBCLASS);
902 if (ret < 0)
903 return ret;
904
905 for (i = 0; i < BQ27XXX_DM_END; i++) {
906 int val;
907
908 if (reg->subclass_id != BQ27XXX_GAS_GAUGING_STATE_SUBCLASS)
909 continue;
910
911 val = be16_to_cpup((u16 *) &di->buffer[reg->offset]);
912
913 dev_info(di->dev, "settings for %s set at %d\n", reg->name, val);
914
915 reg++;
916 }
917
918 return 0;
919 }
920
921 static bool bq27xxx_battery_update_dm_setting(struct bq27xxx_device_info *di,
922 unsigned int reg, unsigned int val)
923 {
924 struct bq27xxx_dm_regs *dm_reg = &bq27xxx_dm_subclass_regs[di->chip][reg];
925 u16 *prev = (u16 *) &di->buffer[dm_reg->offset];
926
927 if (be16_to_cpup(prev) == val)
928 return false;
929
930 *prev = cpu_to_be16(val);
931
932 return true;
933 }
934
935 static u8 bq27xxx_battery_checksum(struct bq27xxx_device_info *di)
936 {
937 u8 *data = (u8 *) &di->buffer;
938 u16 sum = 0;
939 int i;
940
941 for (i = 0; i < sizeof(di->buffer); i++) {
942 sum += data[i];
943 sum &= 0xff;
944 }
945
946 return 0xff - sum;
947 }
948
949 static int bq27xxx_battery_write_nvram(struct bq27xxx_device_info *di,
950 unsigned int subclass)
951 {
952 int ret;
953
954 ret = di->bus.write(di, BQ27XXX_REG_CTRL, BQ27XXX_SET_CFGUPDATE, false);
955 if (ret)
956 return ret;
957
> 958 ret = di->bus.write(di, BQ27XXX_BLOCK_DATA_CONTROL, 0, true);
959 if (ret)
960 return ret;
961
962 ret = di->bus.write(di, BQ27XXX_BLOCK_DATA_CLASS, subclass, true);
963 if (ret)
964 return ret;
965
966 ret = di->bus.write(di, BQ27XXX_DATA_BLOCK, 0, true);
967 if (ret)
968 return ret;
969
> 970 ret = di->bus.write_bulk(di, BQ27XXX_BLOCK_DATA,
971 (u8 *) &di->buffer, sizeof(di->buffer));
972 if (ret < 0)
973 return ret;
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation Attachments
- .config.gz [application/gzip] 31240 bytes