Hi Andy, I love your patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v5.5 next-20200204] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Andy-Shevchenko/platform-chrome-wilco_ec-Platform-data-shan-t-include-kernel-h/20200205-035444 base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git d4e9056daedca3891414fe3c91de3449a5dad0f2 config: x86_64-randconfig-e003-20200204 (attached as .config) compiler: gcc-7 (Debian 7.5.0-3) 7.5.0 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 If you fix the issue, kindly add following tag Reported-by: kbuild test robot All error/warnings (new ones prefixed by >>): >> drivers/platform/chrome/wilco_ec/sysfs.c:66:12: warning: 'struct device_attribute' declared inside parameter list will not be visible outside of this definition or declaration struct device_attribute *attr, ^~~~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c: In function 'boot_on_ac_store': >> drivers/platform/chrome/wilco_ec/sysfs.c:69:31: error: implicit declaration of function 'dev_get_drvdata' [-Werror=implicit-function-declaration] struct wilco_ec_device *ec = dev_get_drvdata(dev); ^~~~~~~~~~~~~~~ >> drivers/platform/chrome/wilco_ec/sysfs.c:69:31: warning: initialization makes pointer from integer without a cast [-Wint-conversion] drivers/platform/chrome/wilco_ec/sysfs.c: At top level: >> drivers/platform/chrome/wilco_ec/sysfs.c:97:8: error: type defaults to 'int' in declaration of 'DEVICE_ATTR_WO' [-Werror=implicit-int] static DEVICE_ATTR_WO(boot_on_ac); ^~~~~~~~~~~~~~ >> drivers/platform/chrome/wilco_ec/sysfs.c:97:1: warning: parameter names (without types) in function declaration static DEVICE_ATTR_WO(boot_on_ac); ^~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c: In function 'get_info': drivers/platform/chrome/wilco_ec/sysfs.c:101:31: warning: initialization makes pointer from integer without a cast [-Wint-conversion] struct wilco_ec_device *ec = dev_get_drvdata(dev); ^~~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c: At top level: drivers/platform/chrome/wilco_ec/sysfs.c:122:56: warning: 'struct device_attribute' declared inside parameter list will not be visible outside of this definition or declaration static ssize_t version_show(struct device *dev, struct device_attribute *attr, ^~~~~~~~~~~~~~~~ >> drivers/platform/chrome/wilco_ec/sysfs.c:128:8: error: type defaults to 'int' in declaration of 'DEVICE_ATTR_RO' [-Werror=implicit-int] static DEVICE_ATTR_RO(version); ^~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:128:1: warning: parameter names (without types) in function declaration static DEVICE_ATTR_RO(version); ^~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:131:15: warning: 'struct device_attribute' declared inside parameter list will not be visible outside of this definition or declaration struct device_attribute *attr, char *buf) ^~~~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:136:8: error: type defaults to 'int' in declaration of 'DEVICE_ATTR_RO' [-Werror=implicit-int] static DEVICE_ATTR_RO(build_revision); ^~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:136:1: warning: parameter names (without types) in function declaration static DEVICE_ATTR_RO(build_revision); ^~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:139:18: warning: 'struct device_attribute' declared inside parameter list will not be visible outside of this definition or declaration struct device_attribute *attr, char *buf) ^~~~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:144:8: error: type defaults to 'int' in declaration of 'DEVICE_ATTR_RO' [-Werror=implicit-int] static DEVICE_ATTR_RO(build_date); ^~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:144:1: warning: parameter names (without types) in function declaration static DEVICE_ATTR_RO(build_date); ^~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:147:13: warning: 'struct device_attribute' declared inside parameter list will not be visible outside of this definition or declaration struct device_attribute *attr, char *buf) ^~~~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:152:8: error: type defaults to 'int' in declaration of 'DEVICE_ATTR_RO' [-Werror=implicit-int] static DEVICE_ATTR_RO(model_number); ^~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:152:1: warning: parameter names (without types) in function declaration static DEVICE_ATTR_RO(model_number); ^~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:177:16: warning: 'struct device_attribute' declared inside parameter list will not be visible outside of this definition or declaration struct device_attribute *attr, char *buf) ^~~~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c: In function 'usb_charge_show': drivers/platform/chrome/wilco_ec/sysfs.c:179:31: warning: initialization makes pointer from integer without a cast [-Wint-conversion] struct wilco_ec_device *ec = dev_get_drvdata(dev); ^~~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c: At top level: drivers/platform/chrome/wilco_ec/sysfs.c:196:17: warning: 'struct device_attribute' declared inside parameter list will not be visible outside of this definition or declaration struct device_attribute *attr, ^~~~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c: In function 'usb_charge_store': drivers/platform/chrome/wilco_ec/sysfs.c:199:31: warning: initialization makes pointer from integer without a cast [-Wint-conversion] struct wilco_ec_device *ec = dev_get_drvdata(dev); ^~~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c: At top level: >> drivers/platform/chrome/wilco_ec/sysfs.c:223:8: error: type defaults to 'int' in declaration of 'DEVICE_ATTR_RW' [-Werror=implicit-int] static DEVICE_ATTR_RW(usb_charge); ^~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:223:1: warning: parameter names (without types) in function declaration static DEVICE_ATTR_RW(usb_charge); ^~~~~~ >> drivers/platform/chrome/wilco_ec/sysfs.c:226:3: error: 'dev_attr_boot_on_ac' undeclared here (not in a function) &dev_attr_boot_on_ac.attr, ^~~~~~~~~~~~~~~~~~~ >> drivers/platform/chrome/wilco_ec/sysfs.c:227:3: error: 'dev_attr_build_date' undeclared here (not in a function); did you mean 'dev_attr_boot_on_ac'? &dev_attr_build_date.attr, ^~~~~~~~~~~~~~~~~~~ dev_attr_boot_on_ac >> drivers/platform/chrome/wilco_ec/sysfs.c:228:3: error: 'dev_attr_build_revision' undeclared here (not in a function); did you mean 'dev_attr_build_date'? &dev_attr_build_revision.attr, ^~~~~~~~~~~~~~~~~~~~~~~ dev_attr_build_date >> drivers/platform/chrome/wilco_ec/sysfs.c:229:3: error: 'dev_attr_model_number' undeclared here (not in a function); did you mean 'dev_attr_build_date'? &dev_attr_model_number.attr, ^~~~~~~~~~~~~~~~~~~~~ dev_attr_build_date >> drivers/platform/chrome/wilco_ec/sysfs.c:230:3: error: 'dev_attr_usb_charge' undeclared here (not in a function); did you mean 'send_usb_charge'? &dev_attr_usb_charge.attr, ^~~~~~~~~~~~~~~~~~~ send_usb_charge >> drivers/platform/chrome/wilco_ec/sysfs.c:231:3: error: 'dev_attr_version' undeclared here (not in a function); did you mean 'dev_attr_boot_on_ac'? &dev_attr_version.attr, ^~~~~~~~~~~~~~~~ dev_attr_boot_on_ac drivers/platform/chrome/wilco_ec/sysfs.c: In function 'wilco_ec_add_sysfs': >> drivers/platform/chrome/wilco_ec/sysfs.c:241:36: error: dereferencing pointer to incomplete type 'struct device' return sysfs_create_group(&ec->dev->kobj, &wilco_dev_attr_group); ^~ >> drivers/platform/chrome/wilco_ec/sysfs.c:241:36: error: request for member 'kobj' in something not a structure or union >> drivers/platform/chrome/wilco_ec/sysfs.c:241:28: error: passing argument 1 of 'sysfs_create_group' from incompatible pointer type [-Werror=incompatible-pointer-types] return sysfs_create_group(&ec->dev->kobj, &wilco_dev_attr_group); ^ In file included from drivers/platform/chrome/wilco_ec/sysfs.c:12:0: include/linux/sysfs.h:276:18: note: expected 'struct kobject *' but argument is of type 'struct attribute * (*)[1]' int __must_check sysfs_create_group(struct kobject *kobj, ^~~~~~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c: In function 'wilco_ec_remove_sysfs': drivers/platform/chrome/wilco_ec/sysfs.c:246:29: error: request for member 'kobj' in something not a structure or union sysfs_remove_group(&ec->dev->kobj, &wilco_dev_attr_group); ^~ >> drivers/platform/chrome/wilco_ec/sysfs.c:246:21: error: passing argument 1 of 'sysfs_remove_group' from incompatible pointer type [-Werror=incompatible-pointer-types] sysfs_remove_group(&ec->dev->kobj, &wilco_dev_attr_group); ^ In file included from drivers/platform/chrome/wilco_ec/sysfs.c:12:0: include/linux/sysfs.h:284:6: note: expected 'struct kobject *' but argument is of type 'struct attribute * (*)[1]' void sysfs_remove_group(struct kobject *kobj, ^~~~~~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c: At top level: drivers/platform/chrome/wilco_ec/sysfs.c:97:8: warning: 'DEVICE_ATTR_WO' declared 'static' but never defined [-Wunused-function] static DEVICE_ATTR_WO(boot_on_ac); ^~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:152:8: warning: 'DEVICE_ATTR_RO' declared 'static' but never defined [-Wunused-function] static DEVICE_ATTR_RO(model_number); ^~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:223:8: warning: 'DEVICE_ATTR_RW' declared 'static' but never defined [-Wunused-function] static DEVICE_ATTR_RW(usb_charge); ^~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:195:16: warning: 'usb_charge_store' defined but not used [-Wunused-function] static ssize_t usb_charge_store(struct device *dev, ^~~~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:176:16: warning: 'usb_charge_show' defined but not used [-Wunused-function] static ssize_t usb_charge_show(struct device *dev, ^~~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:146:16: warning: 'model_number_show' defined but not used [-Wunused-function] static ssize_t model_number_show(struct device *dev, ^~~~~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:138:16: warning: 'build_date_show' defined but not used [-Wunused-function] static ssize_t build_date_show(struct device *dev, ^~~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:130:16: warning: 'build_revision_show' defined but not used [-Wunused-function] static ssize_t build_revision_show(struct device *dev, ^~~~~~~~~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:122:16: warning: 'version_show' defined but not used [-Wunused-function] static ssize_t version_show(struct device *dev, struct device_attribute *attr, ^~~~~~~~~~~~ drivers/platform/chrome/wilco_ec/sysfs.c:65:16: warning: 'boot_on_ac_store' defined but not used [-Wunused-function] static ssize_t boot_on_ac_store(struct device *dev, ^~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +/dev_get_drvdata +69 drivers/platform/chrome/wilco_ec/sysfs.c 79e3f1d3db3d99 Raul E Rangel 2019-06-03 64 4c1ca625c622b7 Nick Crews 2019-04-16 65 static ssize_t boot_on_ac_store(struct device *dev, 4c1ca625c622b7 Nick Crews 2019-04-16 @66 struct device_attribute *attr, 4c1ca625c622b7 Nick Crews 2019-04-16 67 const char *buf, size_t count) 4c1ca625c622b7 Nick Crews 2019-04-16 68 { 4c1ca625c622b7 Nick Crews 2019-04-16 @69 struct wilco_ec_device *ec = dev_get_drvdata(dev); 4c1ca625c622b7 Nick Crews 2019-04-16 70 struct boot_on_ac_request rq; 4c1ca625c622b7 Nick Crews 2019-04-16 71 struct wilco_ec_message msg; 4c1ca625c622b7 Nick Crews 2019-04-16 72 int ret; 4c1ca625c622b7 Nick Crews 2019-04-16 73 u8 val; 4c1ca625c622b7 Nick Crews 2019-04-16 74 4c1ca625c622b7 Nick Crews 2019-04-16 75 ret = kstrtou8(buf, 10, &val); 4c1ca625c622b7 Nick Crews 2019-04-16 76 if (ret < 0) 4c1ca625c622b7 Nick Crews 2019-04-16 77 return ret; 4c1ca625c622b7 Nick Crews 2019-04-16 78 if (val > 1) 4c1ca625c622b7 Nick Crews 2019-04-16 79 return -EINVAL; 4c1ca625c622b7 Nick Crews 2019-04-16 80 4c1ca625c622b7 Nick Crews 2019-04-16 81 memset(&rq, 0, sizeof(rq)); 4c1ca625c622b7 Nick Crews 2019-04-16 82 rq.cmd = CMD_KB_CMOS; 4c1ca625c622b7 Nick Crews 2019-04-16 83 rq.sub_cmd = SUB_CMD_KB_CMOS_AUTO_ON; 4c1ca625c622b7 Nick Crews 2019-04-16 84 rq.val = val; 4c1ca625c622b7 Nick Crews 2019-04-16 85 4c1ca625c622b7 Nick Crews 2019-04-16 86 memset(&msg, 0, sizeof(msg)); 4c1ca625c622b7 Nick Crews 2019-04-16 87 msg.type = WILCO_EC_MSG_LEGACY; 4c1ca625c622b7 Nick Crews 2019-04-16 88 msg.request_data = &rq; 4c1ca625c622b7 Nick Crews 2019-04-16 89 msg.request_size = sizeof(rq); 4c1ca625c622b7 Nick Crews 2019-04-16 90 ret = wilco_ec_mailbox(ec, &msg); 4c1ca625c622b7 Nick Crews 2019-04-16 91 if (ret < 0) 4c1ca625c622b7 Nick Crews 2019-04-16 92 return ret; 4c1ca625c622b7 Nick Crews 2019-04-16 93 4c1ca625c622b7 Nick Crews 2019-04-16 94 return count; 4c1ca625c622b7 Nick Crews 2019-04-16 95 } 4c1ca625c622b7 Nick Crews 2019-04-16 96 4c1ca625c622b7 Nick Crews 2019-04-16 @97 static DEVICE_ATTR_WO(boot_on_ac); 4c1ca625c622b7 Nick Crews 2019-04-16 98 79e3f1d3db3d99 Raul E Rangel 2019-06-03 99 static ssize_t get_info(struct device *dev, char *buf, enum get_ec_info_op op) 79e3f1d3db3d99 Raul E Rangel 2019-06-03 100 { 79e3f1d3db3d99 Raul E Rangel 2019-06-03 101 struct wilco_ec_device *ec = dev_get_drvdata(dev); 79e3f1d3db3d99 Raul E Rangel 2019-06-03 102 struct get_ec_info_req req = { .cmd = CMD_EC_INFO, .op = op }; 79e3f1d3db3d99 Raul E Rangel 2019-06-03 103 struct get_ec_info_resp resp; 79e3f1d3db3d99 Raul E Rangel 2019-06-03 104 int ret; 79e3f1d3db3d99 Raul E Rangel 2019-06-03 105 79e3f1d3db3d99 Raul E Rangel 2019-06-03 106 struct wilco_ec_message msg = { 79e3f1d3db3d99 Raul E Rangel 2019-06-03 107 .type = WILCO_EC_MSG_LEGACY, 79e3f1d3db3d99 Raul E Rangel 2019-06-03 108 .request_data = &req, 79e3f1d3db3d99 Raul E Rangel 2019-06-03 109 .request_size = sizeof(req), 79e3f1d3db3d99 Raul E Rangel 2019-06-03 110 .response_data = &resp, 79e3f1d3db3d99 Raul E Rangel 2019-06-03 111 .response_size = sizeof(resp), 79e3f1d3db3d99 Raul E Rangel 2019-06-03 112 }; 79e3f1d3db3d99 Raul E Rangel 2019-06-03 113 79e3f1d3db3d99 Raul E Rangel 2019-06-03 114 ret = wilco_ec_mailbox(ec, &msg); 79e3f1d3db3d99 Raul E Rangel 2019-06-03 115 if (ret < 0) 79e3f1d3db3d99 Raul E Rangel 2019-06-03 116 return ret; 79e3f1d3db3d99 Raul E Rangel 2019-06-03 117 79e3f1d3db3d99 Raul E Rangel 2019-06-03 118 return scnprintf(buf, PAGE_SIZE, "%.*s\n", (int)sizeof(resp.value), 79e3f1d3db3d99 Raul E Rangel 2019-06-03 119 (char *)&resp.value); 79e3f1d3db3d99 Raul E Rangel 2019-06-03 120 } 79e3f1d3db3d99 Raul E Rangel 2019-06-03 121 79e3f1d3db3d99 Raul E Rangel 2019-06-03 122 static ssize_t version_show(struct device *dev, struct device_attribute *attr, 79e3f1d3db3d99 Raul E Rangel 2019-06-03 123 char *buf) 79e3f1d3db3d99 Raul E Rangel 2019-06-03 124 { 79e3f1d3db3d99 Raul E Rangel 2019-06-03 125 return get_info(dev, buf, CMD_GET_EC_LABEL); 79e3f1d3db3d99 Raul E Rangel 2019-06-03 126 } 79e3f1d3db3d99 Raul E Rangel 2019-06-03 127 79e3f1d3db3d99 Raul E Rangel 2019-06-03 @128 static DEVICE_ATTR_RO(version); 79e3f1d3db3d99 Raul E Rangel 2019-06-03 129 79e3f1d3db3d99 Raul E Rangel 2019-06-03 130 static ssize_t build_revision_show(struct device *dev, 79e3f1d3db3d99 Raul E Rangel 2019-06-03 131 struct device_attribute *attr, char *buf) 79e3f1d3db3d99 Raul E Rangel 2019-06-03 132 { 79e3f1d3db3d99 Raul E Rangel 2019-06-03 133 return get_info(dev, buf, CMD_GET_EC_REV); 79e3f1d3db3d99 Raul E Rangel 2019-06-03 134 } 79e3f1d3db3d99 Raul E Rangel 2019-06-03 135 79e3f1d3db3d99 Raul E Rangel 2019-06-03 136 static DEVICE_ATTR_RO(build_revision); 79e3f1d3db3d99 Raul E Rangel 2019-06-03 137 79e3f1d3db3d99 Raul E Rangel 2019-06-03 138 static ssize_t build_date_show(struct device *dev, 79e3f1d3db3d99 Raul E Rangel 2019-06-03 139 struct device_attribute *attr, char *buf) 79e3f1d3db3d99 Raul E Rangel 2019-06-03 140 { 79e3f1d3db3d99 Raul E Rangel 2019-06-03 141 return get_info(dev, buf, CMD_GET_EC_BUILD_DATE); 79e3f1d3db3d99 Raul E Rangel 2019-06-03 142 } 79e3f1d3db3d99 Raul E Rangel 2019-06-03 143 79e3f1d3db3d99 Raul E Rangel 2019-06-03 144 static DEVICE_ATTR_RO(build_date); 79e3f1d3db3d99 Raul E Rangel 2019-06-03 145 79e3f1d3db3d99 Raul E Rangel 2019-06-03 146 static ssize_t model_number_show(struct device *dev, 79e3f1d3db3d99 Raul E Rangel 2019-06-03 147 struct device_attribute *attr, char *buf) 79e3f1d3db3d99 Raul E Rangel 2019-06-03 148 { 79e3f1d3db3d99 Raul E Rangel 2019-06-03 149 return get_info(dev, buf, CMD_GET_EC_MODEL); 79e3f1d3db3d99 Raul E Rangel 2019-06-03 150 } 79e3f1d3db3d99 Raul E Rangel 2019-06-03 151 79e3f1d3db3d99 Raul E Rangel 2019-06-03 152 static DEVICE_ATTR_RO(model_number); 79e3f1d3db3d99 Raul E Rangel 2019-06-03 153 fdf0fe2df3e321 Daniel Campello 2019-10-08 154 static int send_usb_charge(struct wilco_ec_device *ec, fdf0fe2df3e321 Daniel Campello 2019-10-08 155 struct usb_charge_request *rq, fdf0fe2df3e321 Daniel Campello 2019-10-08 156 struct usb_charge_response *rs) fdf0fe2df3e321 Daniel Campello 2019-10-08 157 { fdf0fe2df3e321 Daniel Campello 2019-10-08 158 struct wilco_ec_message msg; fdf0fe2df3e321 Daniel Campello 2019-10-08 159 int ret; fdf0fe2df3e321 Daniel Campello 2019-10-08 160 fdf0fe2df3e321 Daniel Campello 2019-10-08 161 memset(&msg, 0, sizeof(msg)); fdf0fe2df3e321 Daniel Campello 2019-10-08 162 msg.type = WILCO_EC_MSG_LEGACY; fdf0fe2df3e321 Daniel Campello 2019-10-08 163 msg.request_data = rq; fdf0fe2df3e321 Daniel Campello 2019-10-08 164 msg.request_size = sizeof(*rq); fdf0fe2df3e321 Daniel Campello 2019-10-08 165 msg.response_data = rs; fdf0fe2df3e321 Daniel Campello 2019-10-08 166 msg.response_size = sizeof(*rs); fdf0fe2df3e321 Daniel Campello 2019-10-08 167 ret = wilco_ec_mailbox(ec, &msg); fdf0fe2df3e321 Daniel Campello 2019-10-08 168 if (ret < 0) fdf0fe2df3e321 Daniel Campello 2019-10-08 169 return ret; fdf0fe2df3e321 Daniel Campello 2019-10-08 170 if (rs->status) fdf0fe2df3e321 Daniel Campello 2019-10-08 171 return -EIO; fdf0fe2df3e321 Daniel Campello 2019-10-08 172 fdf0fe2df3e321 Daniel Campello 2019-10-08 173 return 0; fdf0fe2df3e321 Daniel Campello 2019-10-08 174 } fdf0fe2df3e321 Daniel Campello 2019-10-08 175 fdf0fe2df3e321 Daniel Campello 2019-10-08 176 static ssize_t usb_charge_show(struct device *dev, fdf0fe2df3e321 Daniel Campello 2019-10-08 177 struct device_attribute *attr, char *buf) fdf0fe2df3e321 Daniel Campello 2019-10-08 178 { fdf0fe2df3e321 Daniel Campello 2019-10-08 179 struct wilco_ec_device *ec = dev_get_drvdata(dev); fdf0fe2df3e321 Daniel Campello 2019-10-08 180 struct usb_charge_request rq; fdf0fe2df3e321 Daniel Campello 2019-10-08 181 struct usb_charge_response rs; fdf0fe2df3e321 Daniel Campello 2019-10-08 182 int ret; fdf0fe2df3e321 Daniel Campello 2019-10-08 183 fdf0fe2df3e321 Daniel Campello 2019-10-08 184 memset(&rq, 0, sizeof(rq)); fdf0fe2df3e321 Daniel Campello 2019-10-08 185 rq.cmd = CMD_USB_CHARGE; fdf0fe2df3e321 Daniel Campello 2019-10-08 186 rq.op = USB_CHARGE_GET; fdf0fe2df3e321 Daniel Campello 2019-10-08 187 fdf0fe2df3e321 Daniel Campello 2019-10-08 188 ret = send_usb_charge(ec, &rq, &rs); fdf0fe2df3e321 Daniel Campello 2019-10-08 189 if (ret < 0) fdf0fe2df3e321 Daniel Campello 2019-10-08 190 return ret; fdf0fe2df3e321 Daniel Campello 2019-10-08 191 fdf0fe2df3e321 Daniel Campello 2019-10-08 192 return sprintf(buf, "%d\n", rs.val); fdf0fe2df3e321 Daniel Campello 2019-10-08 193 } fdf0fe2df3e321 Daniel Campello 2019-10-08 194 fdf0fe2df3e321 Daniel Campello 2019-10-08 195 static ssize_t usb_charge_store(struct device *dev, fdf0fe2df3e321 Daniel Campello 2019-10-08 196 struct device_attribute *attr, fdf0fe2df3e321 Daniel Campello 2019-10-08 197 const char *buf, size_t count) fdf0fe2df3e321 Daniel Campello 2019-10-08 198 { fdf0fe2df3e321 Daniel Campello 2019-10-08 199 struct wilco_ec_device *ec = dev_get_drvdata(dev); fdf0fe2df3e321 Daniel Campello 2019-10-08 200 struct usb_charge_request rq; fdf0fe2df3e321 Daniel Campello 2019-10-08 201 struct usb_charge_response rs; fdf0fe2df3e321 Daniel Campello 2019-10-08 202 int ret; fdf0fe2df3e321 Daniel Campello 2019-10-08 203 u8 val; fdf0fe2df3e321 Daniel Campello 2019-10-08 204 fdf0fe2df3e321 Daniel Campello 2019-10-08 205 ret = kstrtou8(buf, 10, &val); fdf0fe2df3e321 Daniel Campello 2019-10-08 206 if (ret < 0) fdf0fe2df3e321 Daniel Campello 2019-10-08 207 return ret; fdf0fe2df3e321 Daniel Campello 2019-10-08 208 if (val > 1) fdf0fe2df3e321 Daniel Campello 2019-10-08 209 return -EINVAL; fdf0fe2df3e321 Daniel Campello 2019-10-08 210 fdf0fe2df3e321 Daniel Campello 2019-10-08 211 memset(&rq, 0, sizeof(rq)); fdf0fe2df3e321 Daniel Campello 2019-10-08 212 rq.cmd = CMD_USB_CHARGE; fdf0fe2df3e321 Daniel Campello 2019-10-08 213 rq.op = USB_CHARGE_SET; fdf0fe2df3e321 Daniel Campello 2019-10-08 214 rq.val = val; fdf0fe2df3e321 Daniel Campello 2019-10-08 215 fdf0fe2df3e321 Daniel Campello 2019-10-08 216 ret = send_usb_charge(ec, &rq, &rs); fdf0fe2df3e321 Daniel Campello 2019-10-08 217 if (ret < 0) fdf0fe2df3e321 Daniel Campello 2019-10-08 218 return ret; fdf0fe2df3e321 Daniel Campello 2019-10-08 219 fdf0fe2df3e321 Daniel Campello 2019-10-08 220 return count; fdf0fe2df3e321 Daniel Campello 2019-10-08 221 } fdf0fe2df3e321 Daniel Campello 2019-10-08 222 fdf0fe2df3e321 Daniel Campello 2019-10-08 @223 static DEVICE_ATTR_RW(usb_charge); 79e3f1d3db3d99 Raul E Rangel 2019-06-03 224 4c1ca625c622b7 Nick Crews 2019-04-16 225 static struct attribute *wilco_dev_attrs[] = { 4c1ca625c622b7 Nick Crews 2019-04-16 @226 &dev_attr_boot_on_ac.attr, 79e3f1d3db3d99 Raul E Rangel 2019-06-03 @227 &dev_attr_build_date.attr, 79e3f1d3db3d99 Raul E Rangel 2019-06-03 @228 &dev_attr_build_revision.attr, 79e3f1d3db3d99 Raul E Rangel 2019-06-03 @229 &dev_attr_model_number.attr, fdf0fe2df3e321 Daniel Campello 2019-10-08 @230 &dev_attr_usb_charge.attr, 79e3f1d3db3d99 Raul E Rangel 2019-06-03 @231 &dev_attr_version.attr, 4c1ca625c622b7 Nick Crews 2019-04-16 232 NULL, 4c1ca625c622b7 Nick Crews 2019-04-16 233 }; 4c1ca625c622b7 Nick Crews 2019-04-16 234 4c1ca625c622b7 Nick Crews 2019-04-16 235 static struct attribute_group wilco_dev_attr_group = { 4c1ca625c622b7 Nick Crews 2019-04-16 236 .attrs = wilco_dev_attrs, 4c1ca625c622b7 Nick Crews 2019-04-16 237 }; 4c1ca625c622b7 Nick Crews 2019-04-16 238 4c1ca625c622b7 Nick Crews 2019-04-16 239 int wilco_ec_add_sysfs(struct wilco_ec_device *ec) 4c1ca625c622b7 Nick Crews 2019-04-16 240 { 4c1ca625c622b7 Nick Crews 2019-04-16 @241 return sysfs_create_group(&ec->dev->kobj, &wilco_dev_attr_group); 4c1ca625c622b7 Nick Crews 2019-04-16 242 } 4c1ca625c622b7 Nick Crews 2019-04-16 243 4c1ca625c622b7 Nick Crews 2019-04-16 244 void wilco_ec_remove_sysfs(struct wilco_ec_device *ec) 4c1ca625c622b7 Nick Crews 2019-04-16 245 { 4c1ca625c622b7 Nick Crews 2019-04-16 @246 sysfs_remove_group(&ec->dev->kobj, &wilco_dev_attr_group); :::::: The code at line 69 was first introduced by commit :::::: 4c1ca625c622b7a9f04c2949fd1ffdc6effa86de platform/chrome: wilco_ec: Add Boot on AC support :::::: TO: Nick Crews :::::: CC: Enric Balletbo i Serra --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation