Hi Linus, I love your patch! Yet something to improve: [auto build test ERROR on media-tree/master] [also build test ERROR on v5.18 next-20220531] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/intel-lab-lkp/linux/commits/Linus-Walleij/media-s5k4ecgx-Switch-to-GPIO-descriptors/20220531-164948 base: git://linuxtv.org/media_tree.git master config: arm-randconfig-c002-20220531 (https://download.01.org/0day-ci/archive/20220531/202205312157.9EPLfsUw-lkp@xxxxxxxxx/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project c825abd6b0198fb088d9752f556a70705bc99dfd) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://github.com/intel-lab-lkp/linux/commit/d6a5013d9dd546a9c9d7ed3714e861f7593b1635 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Linus-Walleij/media-s5k4ecgx-Switch-to-GPIO-descriptors/20220531-164948 git checkout d6a5013d9dd546a9c9d7ed3714e861f7593b1635 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash drivers/media/i2c/ If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <lkp@xxxxxxxxx> All error/warnings (new ones prefixed by >>): drivers/media/i2c/s5k4ecgx.c:897:38: warning: missing terminating '"' character [-Winvalid-pp-token] gpiod_set_consumer_name(priv->stby, "S5K4ECGX_STBY); ^ >> drivers/media/i2c/s5k4ecgx.c:897:38: error: expected expression >> drivers/media/i2c/s5k4ecgx.c:954:12: error: use of undeclared identifier 's5k4ecgx_remove' .remove = s5k4ecgx_remove, ^ >> drivers/media/i2c/s5k4ecgx.c:955:14: error: use of undeclared identifier 's5k4ecgx_id' .id_table = s5k4ecgx_id, ^ >> drivers/media/i2c/s5k4ecgx.c:958:1: error: function definition is not allowed here module_i2c_driver(v4l2_i2c_driver); ^ include/linux/i2c.h:950:2: note: expanded from macro 'module_i2c_driver' module_driver(__i2c_driver, i2c_add_driver, \ ^ include/linux/device/driver.h:260:41: note: expanded from macro 'module_driver' static int __init __driver##_init(void) \ ^ >> drivers/media/i2c/s5k4ecgx.c:958:1: error: use of undeclared identifier 'v4l2_i2c_driver_init' include/linux/i2c.h:950:2: note: expanded from macro 'module_i2c_driver' module_driver(__i2c_driver, i2c_add_driver, \ ^ include/linux/device/driver.h:264:13: note: expanded from macro 'module_driver' module_init(__driver##_init); \ ^ <scratch space>:73:1: note: expanded from here v4l2_i2c_driver_init ^ >> drivers/media/i2c/s5k4ecgx.c:958:1: error: function definition is not allowed here include/linux/i2c.h:950:2: note: expanded from macro 'module_i2c_driver' module_driver(__i2c_driver, i2c_add_driver, \ ^ include/linux/device/driver.h:265:42: note: expanded from macro 'module_driver' static void __exit __driver##_exit(void) \ ^ >> drivers/media/i2c/s5k4ecgx.c:958:1: error: use of undeclared identifier 'v4l2_i2c_driver_exit'; did you mean 'v4l2_i2c_driver'? include/linux/i2c.h:950:2: note: expanded from macro 'module_i2c_driver' module_driver(__i2c_driver, i2c_add_driver, \ ^ include/linux/device/driver.h:269:13: note: expanded from macro 'module_driver' module_exit(__driver##_exit); ^ <scratch space>:89:1: note: expanded from here v4l2_i2c_driver_exit ^ drivers/media/i2c/s5k4ecgx.c:949:26: note: 'v4l2_i2c_driver' declared here static struct i2c_driver v4l2_i2c_driver = { ^ >> drivers/media/i2c/s5k4ecgx.c:958:1: error: initializing 'exitcall_t' (aka 'void (*)(void)') with an expression of incompatible type 'struct i2c_driver' module_i2c_driver(v4l2_i2c_driver); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/i2c.h:950:2: note: expanded from macro 'module_i2c_driver' module_driver(__i2c_driver, i2c_add_driver, \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/device/driver.h:268:3: note: expanded from macro 'module_driver' } \ ^ include/linux/module.h:100:24: note: expanded from macro '\ module_exit' #define module_exit(x) __exitcall(x); ^ ~ include/linux/init.h:299:20: note: expanded from macro '__exitcall' static exitcall_t __exitcall_##fn __exit_call = fn ^ ~~ <scratch space>:90:1: note: expanded from here __exitcall_v4l2_i2c_driver_exit ^ >> drivers/media/i2c/s5k4ecgx.c:964:36: error: expected '}' MODULE_FIRMWARE(S5K4ECGX_FIRMWARE); ^ drivers/media/i2c/s5k4ecgx.c:856:1: note: to match this '{' { ^ >> drivers/media/i2c/s5k4ecgx.c:949:26: warning: mixing declarations and code is incompatible with standards before C99 [-Wdeclaration-after-statement] static struct i2c_driver v4l2_i2c_driver = { ^ >> drivers/media/i2c/s5k4ecgx.c:895:8: error: use of undeclared label 'out_err' goto out_err; ^ 2 warnings and 10 errors generated. vim +897 drivers/media/i2c/s5k4ecgx.c 853 854 static int s5k4ecgx_probe(struct i2c_client *client, 855 const struct i2c_device_id *id) 856 { 857 struct s5k4ecgx_platform_data *pdata = client->dev.platform_data; 858 struct v4l2_subdev *sd; 859 struct s5k4ecgx *priv; 860 int ret, i; 861 862 if (pdata == NULL) { 863 dev_err(&client->dev, "platform data is missing!\n"); 864 return -EINVAL; 865 } 866 867 priv = devm_kzalloc(&client->dev, sizeof(struct s5k4ecgx), GFP_KERNEL); 868 if (!priv) 869 return -ENOMEM; 870 871 mutex_init(&priv->lock); 872 priv->streaming = 0; 873 874 sd = &priv->sd; 875 /* Registering subdev */ 876 v4l2_i2c_subdev_init(sd, client, &s5k4ecgx_ops); 877 /* Static name; NEVER use in new drivers! */ 878 strscpy(sd->name, S5K4ECGX_DRIVER_NAME, sizeof(sd->name)); 879 880 sd->internal_ops = &s5k4ecgx_subdev_internal_ops; 881 /* Support v4l2 sub-device user space API */ 882 sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; 883 884 priv->pad.flags = MEDIA_PAD_FL_SOURCE; 885 sd->entity.function = MEDIA_ENT_F_CAM_SENSOR; 886 ret = media_entity_pads_init(&sd->entity, 1, &priv->pad); 887 if (ret) 888 return ret; 889 890 /* Request GPIO lines asserted */ 891 priv->stby = devm_gpiod_get(&client->dev, "standby", GPIOD_OUT_HIGH); 892 if (IS_ERR(priv->stby)) { 893 v4l2_err(sd, "failed to request gpio S5K4ECGX_STBY"); 894 ret = PTR_ERR(priv->stby); > 895 goto out_err; 896 } > 897 gpiod_set_consumer_name(priv->stby, "S5K4ECGX_STBY); 898 priv->reset = devm_gpiod_get(&client->dev, "reset", GPIOD_OUT_HIGH); 899 if (IS_ERR(priv->reset)) { 900 v4l2_err(sd, "failed to request gpio S5K4ECGX_RST"); 901 ret = PTR_ERR(priv->reset); 902 goto out_err; 903 } 904 gpiod_set_consumer_name(priv->reset, "S5K4ECGX_RST"); 905 906 for (i = 0; i < S5K4ECGX_NUM_SUPPLIES; i++) 907 priv->supplies[i].supply = s5k4ecgx_supply_names[i]; 908 909 ret = devm_regulator_bulk_get(&client->dev, S5K4ECGX_NUM_SUPPLIES, 910 priv->supplies); 911 if (ret) { 912 dev_err(&client->dev, "Failed to get regulators\n"); 913 goto out_err; 914 } 915 ret = s5k4ecgx_init_v4l2_ctrls(priv); 916 if (ret) 917 goto out_err; 918 919 priv->curr_pixfmt = &s5k4ecgx_formats[0]; 920 priv->curr_frmsize = &s5k4ecgx_prev_sizes[0]; 921 922 return 0; 923 924 out_err: 925 media_entity_cleanup(&priv->sd.entity); 926 927 return ret; 928 } 929 930 static int s5k4ecgx_remove(struct i2c_client *client) 931 { 932 struct v4l2_subdev *sd = i2c_get_clientdata(client); 933 struct s5k4ecgx *priv = to_s5k4ecgx(sd); 934 935 mutex_destroy(&priv->lock); 936 v4l2_device_unregister_subdev(sd); 937 v4l2_ctrl_handler_free(&priv->handler); 938 media_entity_cleanup(&sd->entity); 939 940 return 0; 941 } 942 943 static const struct i2c_device_id s5k4ecgx_id[] = { 944 { S5K4ECGX_DRIVER_NAME, 0 }, 945 {} 946 }; 947 MODULE_DEVICE_TABLE(i2c, s5k4ecgx_id); 948 > 949 static struct i2c_driver v4l2_i2c_driver = { 950 .driver = { 951 .name = S5K4ECGX_DRIVER_NAME, 952 }, 953 .probe = s5k4ecgx_probe, > 954 .remove = s5k4ecgx_remove, > 955 .id_table = s5k4ecgx_id, 956 }; 957 > 958 module_i2c_driver(v4l2_i2c_driver); 959 960 MODULE_DESCRIPTION("Samsung S5K4ECGX 5MP SOC camera"); 961 MODULE_AUTHOR("Sangwook Lee <sangwook.lee@xxxxxxxxxx>"); 962 MODULE_AUTHOR("Seok-Young Jang <quartz.jang@xxxxxxxxxxx>"); 963 MODULE_LICENSE("GPL"); > 964 MODULE_FIRMWARE(S5K4ECGX_FIRMWARE); -- 0-DAY CI Kernel Test Service https://01.org/lkp