All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: "Bence Csókás" <bence98@sch.bme.hu>, linux-i2c@vger.kernel.org
Cc: kbuild-all@lists.01.org, "Bence Csókás" <bence98@sch.bme.hu>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] Adding i2c-cp2615: i2c support for Silicon Labs' CP2615 Digital Audio Bridge
Date: Wed, 17 Mar 2021 20:24:59 +0800	[thread overview]
Message-ID: <202103172057.69FnHH8y-lkp@intel.com> (raw)
In-Reply-To: <20210317103021.1913858-1-bence98@sch.bme.hu>

[-- Attachment #1: Type: text/plain, Size: 15154 bytes --]

Hi "Bence,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on wsa/i2c/for-next]
[also build test WARNING on v5.12-rc3 next-20210317]
[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/0day-ci/linux/commits/Bence-Cs-k-s/Adding-i2c-cp2615-i2c-support-for-Silicon-Labs-CP2615-Digital-Audio-Bridge/20210317-181539
base:   https://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git i2c/for-next
config: arc-allyesconfig (attached as .config)
compiler: arceb-elf-gcc (GCC) 9.3.0
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
        # https://github.com/0day-ci/linux/commit/c8c005a08175789b1874e69abf4c6da690d5b323
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Bence-Cs-k-s/Adding-i2c-cp2615-i2c-support-for-Silicon-Labs-CP2615-Digital-Audio-Bridge/20210317-181539
        git checkout c8c005a08175789b1874e69abf4c6da690d5b323
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

>> drivers/i2c/busses/i2c-cp2615.c:82:5: warning: no previous prototype for 'cp2615_init_iop_msg' [-Wmissing-prototypes]
      82 | int cp2615_init_iop_msg(struct cp2615_iop_msg *ret, enum cp2615_iop_msg_type msg, const void *data, size_t data_len)
         |     ^~~~~~~~~~~~~~~~~~~
>> drivers/i2c/busses/i2c-cp2615.c:99:5: warning: no previous prototype for 'cp2615_init_i2c_msg' [-Wmissing-prototypes]
      99 | int cp2615_init_i2c_msg(struct cp2615_iop_msg *ret, const struct cp2615_i2c_transfer *data)
         |     ^~~~~~~~~~~~~~~~~~~
>> drivers/i2c/busses/i2c-cp2615.c:105:5: warning: no previous prototype for 'cp2615_check_status' [-Wmissing-prototypes]
     105 | int cp2615_check_status(enum cp2615_i2c_status status)
         |     ^~~~~~~~~~~~~~~~~~~
>> drivers/i2c/busses/i2c-cp2615.c:269:1: warning: data definition has no type or storage class
     269 | MODULE_DEVICE_TABLE(usb, id_table);
         | ^~~~~~~~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:269:1: error: type defaults to 'int' in declaration of 'MODULE_DEVICE_TABLE' [-Werror=implicit-int]
>> drivers/i2c/busses/i2c-cp2615.c:269:1: warning: parameter names (without types) in function declaration
   In file included from include/linux/device.h:32,
                    from include/linux/acpi.h:15,
                    from include/linux/i2c.h:13,
                    from drivers/i2c/busses/i2c-cp2615.c:11:
>> include/linux/device/driver.h:263:1: warning: data definition has no type or storage class
     263 | module_init(__driver##_init); \
         | ^~~~~~~~~~~
   include/linux/usb.h:1303:2: note: in expansion of macro 'module_driver'
    1303 |  module_driver(__usb_driver, usb_register, \
         |  ^~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:278:1: note: in expansion of macro 'module_usb_driver'
     278 | module_usb_driver(cp2615_i2c_driver);
         | ^~~~~~~~~~~~~~~~~
   include/linux/device/driver.h:263:1: error: type defaults to 'int' in declaration of 'module_init' [-Werror=implicit-int]
     263 | module_init(__driver##_init); \
         | ^~~~~~~~~~~
   include/linux/usb.h:1303:2: note: in expansion of macro 'module_driver'
    1303 |  module_driver(__usb_driver, usb_register, \
         |  ^~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:278:1: note: in expansion of macro 'module_usb_driver'
     278 | module_usb_driver(cp2615_i2c_driver);
         | ^~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:7,
                    from drivers/i2c/busses/i2c-cp2615.c:9:
>> include/linux/export.h:19:30: warning: parameter names (without types) in function declaration
      19 | #define THIS_MODULE ((struct module *)0)
         |                              ^~~~~~
   include/linux/usb.h:1290:30: note: in expansion of macro 'THIS_MODULE'
    1290 |  usb_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
         |                              ^~~~~~~~~~~
   include/linux/device/driver.h:261:9: note: in expansion of macro 'usb_register'
     261 |  return __register(&(__driver) , ##__VA_ARGS__); \
         |         ^~~~~~~~~~
   include/linux/usb.h:1303:2: note: in expansion of macro 'module_driver'
    1303 |  module_driver(__usb_driver, usb_register, \
         |  ^~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:278:1: note: in expansion of macro 'module_usb_driver'
     278 | module_usb_driver(cp2615_i2c_driver);
         | ^~~~~~~~~~~~~~~~~
   In file included from include/linux/device.h:32,
                    from include/linux/acpi.h:15,
                    from include/linux/i2c.h:13,
                    from drivers/i2c/busses/i2c-cp2615.c:11:
   include/linux/device/driver.h:268:1: warning: data definition has no type or storage class
     268 | module_exit(__driver##_exit);
         | ^~~~~~~~~~~
   include/linux/usb.h:1303:2: note: in expansion of macro 'module_driver'
    1303 |  module_driver(__usb_driver, usb_register, \
         |  ^~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:278:1: note: in expansion of macro 'module_usb_driver'
     278 | module_usb_driver(cp2615_i2c_driver);
         | ^~~~~~~~~~~~~~~~~
   include/linux/device/driver.h:268:1: error: type defaults to 'int' in declaration of 'module_exit' [-Werror=implicit-int]
     268 | module_exit(__driver##_exit);
         | ^~~~~~~~~~~
   include/linux/usb.h:1303:2: note: in expansion of macro 'module_driver'
    1303 |  module_driver(__usb_driver, usb_register, \
         |  ^~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:278:1: note: in expansion of macro 'module_usb_driver'
     278 | module_usb_driver(cp2615_i2c_driver);
         | ^~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:7,
                    from drivers/i2c/busses/i2c-cp2615.c:9:
>> include/linux/export.h:19:30: warning: parameter names (without types) in function declaration
      19 | #define THIS_MODULE ((struct module *)0)
         |                              ^~~~~~
   include/linux/usb.h:1290:30: note: in expansion of macro 'THIS_MODULE'
    1290 |  usb_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
         |                              ^~~~~~~~~~~
   include/linux/device/driver.h:261:9: note: in expansion of macro 'usb_register'
     261 |  return __register(&(__driver) , ##__VA_ARGS__); \
         |         ^~~~~~~~~~
   include/linux/usb.h:1303:2: note: in expansion of macro 'module_driver'
    1303 |  module_driver(__usb_driver, usb_register, \
         |  ^~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:278:1: note: in expansion of macro 'module_usb_driver'
     278 | module_usb_driver(cp2615_i2c_driver);
         | ^~~~~~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:280:15: error: expected declaration specifiers or '...' before string constant
     280 | MODULE_AUTHOR("Bence Csókás <bence98@sch.bme.hu>");
         |               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:281:20: error: expected declaration specifiers or '...' before string constant
     281 | MODULE_DESCRIPTION("CP2615 I2C bus driver");
         |                    ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:282:16: error: expected declaration specifiers or '...' before string constant
     282 | MODULE_LICENSE("GPL");
         |                ^~~~~
   In file included from include/linux/device.h:32,
                    from include/linux/acpi.h:15,
                    from include/linux/i2c.h:13,
                    from drivers/i2c/busses/i2c-cp2615.c:11:
   drivers/i2c/busses/i2c-cp2615.c:278:19: warning: 'cp2615_i2c_driver_init' defined but not used [-Wunused-function]
     278 | module_usb_driver(cp2615_i2c_driver);
         |                   ^~~~~~~~~~~~~~~~~
   include/linux/device/driver.h:259:19: note: in definition of macro 'module_driver'
     259 | static int __init __driver##_init(void) \
         |                   ^~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:278:1: note: in expansion of macro 'module_usb_driver'
     278 | module_usb_driver(cp2615_i2c_driver);
         | ^~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors


vim +/cp2615_init_iop_msg +82 drivers/i2c/busses/i2c-cp2615.c

    81	
  > 82	int cp2615_init_iop_msg(struct cp2615_iop_msg *ret, enum cp2615_iop_msg_type msg, const void *data, size_t data_len)
    83	{
    84		if (data_len > MAX_IOP_PAYLOAD_SIZE)
    85			return -EFBIG;
    86	
    87		if (ret) {
    88			ret->preamble = 0x2A2A;
    89			ret->length = htons(data_len+6);
    90			ret->msg = htons(msg);
    91			if(data && data_len)
    92				memcpy(&ret->data, data, data_len);
    93	        return 0;
    94		} else {
    95	        return -EINVAL;
    96		}
    97	}
    98	
  > 99	int cp2615_init_i2c_msg(struct cp2615_iop_msg *ret, const struct cp2615_i2c_transfer *data)
   100	{
   101	    return cp2615_init_iop_msg(ret, iop_DoI2cTransfer, data, 4 + data->write_len);
   102	}
   103	
   104	/* Translates status codes to Linux errno's */
 > 105	int cp2615_check_status(enum cp2615_i2c_status status)
   106	{
   107		switch (status) {
   108		case CP2615_SUCCESS:
   109				return 0;
   110		case CP2615_BUS_ERROR:
   111			return -ECOMM;
   112		case CP2615_BUS_BUSY:
   113			return -EAGAIN;
   114		case CP2615_TIMEOUT:
   115			return -ETIMEDOUT;
   116		case CP2615_INVALID_PARAM:
   117			return -EINVAL;
   118		case CP2615_CFG_LOCKED:
   119			return -EPERM;
   120		}
   121		/* Unknown error code */
   122		return -EPROTO;
   123	}
   124	
   125	
   126	static int
   127	cp2615_i2c_send(struct usb_interface *usbif, struct cp2615_i2c_transfer *i2c_w)
   128	{
   129		struct cp2615_iop_msg *msg = kzalloc(sizeof(struct cp2615_iop_msg), GFP_KERNEL);
   130		struct usb_device *usbdev = interface_to_usbdev(usbif);
   131		int res = cp2615_init_i2c_msg(msg, i2c_w);
   132		if (!res)
   133			res = usb_bulk_msg(usbdev, usb_sndbulkpipe(usbdev, IOP_EP_OUT), msg, ntohs(msg->length), NULL, 0);
   134		kfree(msg);
   135		return res;
   136	}
   137	
   138	static int
   139	cp2615_i2c_recv(struct usb_interface *usbif, unsigned char tag, void *buf)
   140	{
   141		struct cp2615_iop_msg *msg = kzalloc(sizeof(struct cp2615_iop_msg), GFP_KERNEL);
   142		struct cp2615_i2c_transfer_result *i2c_r = (struct cp2615_i2c_transfer_result*) &msg->data;
   143		struct usb_device *usbdev = interface_to_usbdev(usbif);
   144		int res = usb_bulk_msg(usbdev, usb_rcvbulkpipe(usbdev, IOP_EP_IN), msg, sizeof(struct cp2615_iop_msg), NULL, 0);
   145		if (res < 0)
   146			return res;
   147	
   148		if (msg->msg != htons(iop_I2cTransferResult) || i2c_r->tag != tag)
   149			return -EIO;
   150	
   151		res = cp2615_check_status(i2c_r->status);
   152		if (res < 0)
   153			return res;
   154	
   155		memcpy(buf, &i2c_r->data, i2c_r->read_len);
   156		kfree(msg);
   157		return 0;
   158	}
   159	
   160	static int
   161	cp2615_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
   162	{
   163		struct usb_interface *usbif = adap->algo_data;
   164		int i = 0, ret = 0;
   165		struct i2c_msg *msg;
   166		struct cp2615_i2c_transfer i2c_w = {0};
   167		dev_dbg(&usbif->dev, "Doing %d I2C transactions\n", num);
   168	
   169		for(; !ret && i < num; i++) {
   170			msg = &msgs[i];
   171	
   172			i2c_w.tag = 0xdd;
   173			i2c_w.i2caddr = i2c_8bit_addr_from_msg(msg);
   174			if (msg->flags & I2C_M_RD) {
   175				i2c_w.read_len = msg->len;
   176				i2c_w.write_len = 0;
   177			} else {
   178				i2c_w.read_len = 0;
   179				i2c_w.write_len = msg->len;
   180				memcpy(&i2c_w.data, msg->buf, i2c_w.write_len);
   181			}
   182			ret = cp2615_i2c_send(usbif, &i2c_w);
   183			if (ret)
   184				break;
   185			ret = cp2615_i2c_recv(usbif, i2c_w.tag, msg->buf);
   186		}
   187		if (ret < 0)
   188			return ret;
   189		return i;
   190	}
   191	
   192	static u32
   193	cp2615_i2c_func(struct i2c_adapter *adap)
   194	{
   195		return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
   196	}
   197	
   198	static const struct i2c_algorithm cp2615_i2c_algo = {
   199		.master_xfer	= cp2615_i2c_master_xfer,
   200		.functionality	= cp2615_i2c_func,
   201	};
   202	
   203	/*
   204	 * This chip has some limitations: one is that the USB endpoint
   205	 * can only receive 64 bytes/transfer, that leaves 54 bytes for
   206	 * the I2C transfer. On top of that, EITHER read_len OR write_len
   207	 * may be zero, but not both. If both are non-zero, the adapter
   208	 * issues a write followed by a read. And the chip does not
   209	 * support repeated START between the write and read phases.
   210	 *
   211	 * FIXME: There in no quirk flag for specifying that the adapter
   212	 * does not support empty transfers, or that it cannot emit a
   213	 * START condition between the combined phases.
   214	 */
   215	struct i2c_adapter_quirks cp2615_i2c_quirks = {
   216		.max_write_len = MAX_I2C_SIZE,
   217		.max_read_len = MAX_I2C_SIZE,
   218		.flags = I2C_AQ_COMB_WRITE_THEN_READ,
   219		.max_comb_1st_msg_len = MAX_I2C_SIZE,
   220		.max_comb_2nd_msg_len = MAX_I2C_SIZE
   221	};
   222	
   223	static void
   224	cp2615_i2c_remove(struct usb_interface *usbif)
   225	{
   226		struct i2c_adapter *adap = usb_get_intfdata(usbif);
   227	
   228		usb_set_intfdata(usbif, NULL);
   229		i2c_del_adapter(adap);
   230	}
   231	
   232	static int
   233	cp2615_i2c_probe(struct usb_interface *usbif, const struct usb_device_id *id)
   234	{
   235		int ret = 0;
   236		struct i2c_adapter *adap;
   237		struct usb_device *usbdev = interface_to_usbdev(usbif);
   238	
   239		ret = usb_set_interface(usbdev, IOP_IFN, IOP_ALTSETTING);
   240		if (ret)
   241			return ret;
   242	
   243		adap = devm_kzalloc(&usbif->dev, sizeof(struct i2c_adapter), GFP_KERNEL);
   244		if (!adap)
   245			return -ENOMEM;
   246	
   247		strncpy(adap->name, usbdev->serial, sizeof(adap->name));
   248		adap->owner = THIS_MODULE;
   249		adap->dev.parent = &usbif->dev;
   250		adap->dev.of_node = usbif->dev.of_node;
   251		adap->timeout = HZ;
   252		adap->algo = &cp2615_i2c_algo;
   253		adap->quirks = &cp2615_i2c_quirks;
   254		adap->algo_data = usbif;
   255	
   256		ret = i2c_add_adapter(adap);
   257		if (ret)
   258			return ret;
   259	
   260		usb_set_intfdata(usbif, adap);
   261		return ret;
   262	}
   263	
   264	static const struct usb_device_id id_table[] = {
   265		{ USB_DEVICE(CP2615_VID, CP2615_PID) },
   266		{ }
   267	};
   268	
 > 269	MODULE_DEVICE_TABLE(usb, id_table);
   270	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 67374 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH v2] Adding i2c-cp2615: i2c support for Silicon Labs' CP2615 Digital Audio Bridge
Date: Wed, 17 Mar 2021 20:24:59 +0800	[thread overview]
Message-ID: <202103172057.69FnHH8y-lkp@intel.com> (raw)
In-Reply-To: <20210317103021.1913858-1-bence98@sch.bme.hu>

[-- Attachment #1: Type: text/plain, Size: 15502 bytes --]

Hi "Bence,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on wsa/i2c/for-next]
[also build test WARNING on v5.12-rc3 next-20210317]
[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/0day-ci/linux/commits/Bence-Cs-k-s/Adding-i2c-cp2615-i2c-support-for-Silicon-Labs-CP2615-Digital-Audio-Bridge/20210317-181539
base:   https://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git i2c/for-next
config: arc-allyesconfig (attached as .config)
compiler: arceb-elf-gcc (GCC) 9.3.0
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
        # https://github.com/0day-ci/linux/commit/c8c005a08175789b1874e69abf4c6da690d5b323
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Bence-Cs-k-s/Adding-i2c-cp2615-i2c-support-for-Silicon-Labs-CP2615-Digital-Audio-Bridge/20210317-181539
        git checkout c8c005a08175789b1874e69abf4c6da690d5b323
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

>> drivers/i2c/busses/i2c-cp2615.c:82:5: warning: no previous prototype for 'cp2615_init_iop_msg' [-Wmissing-prototypes]
      82 | int cp2615_init_iop_msg(struct cp2615_iop_msg *ret, enum cp2615_iop_msg_type msg, const void *data, size_t data_len)
         |     ^~~~~~~~~~~~~~~~~~~
>> drivers/i2c/busses/i2c-cp2615.c:99:5: warning: no previous prototype for 'cp2615_init_i2c_msg' [-Wmissing-prototypes]
      99 | int cp2615_init_i2c_msg(struct cp2615_iop_msg *ret, const struct cp2615_i2c_transfer *data)
         |     ^~~~~~~~~~~~~~~~~~~
>> drivers/i2c/busses/i2c-cp2615.c:105:5: warning: no previous prototype for 'cp2615_check_status' [-Wmissing-prototypes]
     105 | int cp2615_check_status(enum cp2615_i2c_status status)
         |     ^~~~~~~~~~~~~~~~~~~
>> drivers/i2c/busses/i2c-cp2615.c:269:1: warning: data definition has no type or storage class
     269 | MODULE_DEVICE_TABLE(usb, id_table);
         | ^~~~~~~~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:269:1: error: type defaults to 'int' in declaration of 'MODULE_DEVICE_TABLE' [-Werror=implicit-int]
>> drivers/i2c/busses/i2c-cp2615.c:269:1: warning: parameter names (without types) in function declaration
   In file included from include/linux/device.h:32,
                    from include/linux/acpi.h:15,
                    from include/linux/i2c.h:13,
                    from drivers/i2c/busses/i2c-cp2615.c:11:
>> include/linux/device/driver.h:263:1: warning: data definition has no type or storage class
     263 | module_init(__driver##_init); \
         | ^~~~~~~~~~~
   include/linux/usb.h:1303:2: note: in expansion of macro 'module_driver'
    1303 |  module_driver(__usb_driver, usb_register, \
         |  ^~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:278:1: note: in expansion of macro 'module_usb_driver'
     278 | module_usb_driver(cp2615_i2c_driver);
         | ^~~~~~~~~~~~~~~~~
   include/linux/device/driver.h:263:1: error: type defaults to 'int' in declaration of 'module_init' [-Werror=implicit-int]
     263 | module_init(__driver##_init); \
         | ^~~~~~~~~~~
   include/linux/usb.h:1303:2: note: in expansion of macro 'module_driver'
    1303 |  module_driver(__usb_driver, usb_register, \
         |  ^~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:278:1: note: in expansion of macro 'module_usb_driver'
     278 | module_usb_driver(cp2615_i2c_driver);
         | ^~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:7,
                    from drivers/i2c/busses/i2c-cp2615.c:9:
>> include/linux/export.h:19:30: warning: parameter names (without types) in function declaration
      19 | #define THIS_MODULE ((struct module *)0)
         |                              ^~~~~~
   include/linux/usb.h:1290:30: note: in expansion of macro 'THIS_MODULE'
    1290 |  usb_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
         |                              ^~~~~~~~~~~
   include/linux/device/driver.h:261:9: note: in expansion of macro 'usb_register'
     261 |  return __register(&(__driver) , ##__VA_ARGS__); \
         |         ^~~~~~~~~~
   include/linux/usb.h:1303:2: note: in expansion of macro 'module_driver'
    1303 |  module_driver(__usb_driver, usb_register, \
         |  ^~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:278:1: note: in expansion of macro 'module_usb_driver'
     278 | module_usb_driver(cp2615_i2c_driver);
         | ^~~~~~~~~~~~~~~~~
   In file included from include/linux/device.h:32,
                    from include/linux/acpi.h:15,
                    from include/linux/i2c.h:13,
                    from drivers/i2c/busses/i2c-cp2615.c:11:
   include/linux/device/driver.h:268:1: warning: data definition has no type or storage class
     268 | module_exit(__driver##_exit);
         | ^~~~~~~~~~~
   include/linux/usb.h:1303:2: note: in expansion of macro 'module_driver'
    1303 |  module_driver(__usb_driver, usb_register, \
         |  ^~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:278:1: note: in expansion of macro 'module_usb_driver'
     278 | module_usb_driver(cp2615_i2c_driver);
         | ^~~~~~~~~~~~~~~~~
   include/linux/device/driver.h:268:1: error: type defaults to 'int' in declaration of 'module_exit' [-Werror=implicit-int]
     268 | module_exit(__driver##_exit);
         | ^~~~~~~~~~~
   include/linux/usb.h:1303:2: note: in expansion of macro 'module_driver'
    1303 |  module_driver(__usb_driver, usb_register, \
         |  ^~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:278:1: note: in expansion of macro 'module_usb_driver'
     278 | module_usb_driver(cp2615_i2c_driver);
         | ^~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:7,
                    from drivers/i2c/busses/i2c-cp2615.c:9:
>> include/linux/export.h:19:30: warning: parameter names (without types) in function declaration
      19 | #define THIS_MODULE ((struct module *)0)
         |                              ^~~~~~
   include/linux/usb.h:1290:30: note: in expansion of macro 'THIS_MODULE'
    1290 |  usb_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
         |                              ^~~~~~~~~~~
   include/linux/device/driver.h:261:9: note: in expansion of macro 'usb_register'
     261 |  return __register(&(__driver) , ##__VA_ARGS__); \
         |         ^~~~~~~~~~
   include/linux/usb.h:1303:2: note: in expansion of macro 'module_driver'
    1303 |  module_driver(__usb_driver, usb_register, \
         |  ^~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:278:1: note: in expansion of macro 'module_usb_driver'
     278 | module_usb_driver(cp2615_i2c_driver);
         | ^~~~~~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:280:15: error: expected declaration specifiers or '...' before string constant
     280 | MODULE_AUTHOR("Bence Csókás <bence98@sch.bme.hu>");
         |               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:281:20: error: expected declaration specifiers or '...' before string constant
     281 | MODULE_DESCRIPTION("CP2615 I2C bus driver");
         |                    ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:282:16: error: expected declaration specifiers or '...' before string constant
     282 | MODULE_LICENSE("GPL");
         |                ^~~~~
   In file included from include/linux/device.h:32,
                    from include/linux/acpi.h:15,
                    from include/linux/i2c.h:13,
                    from drivers/i2c/busses/i2c-cp2615.c:11:
   drivers/i2c/busses/i2c-cp2615.c:278:19: warning: 'cp2615_i2c_driver_init' defined but not used [-Wunused-function]
     278 | module_usb_driver(cp2615_i2c_driver);
         |                   ^~~~~~~~~~~~~~~~~
   include/linux/device/driver.h:259:19: note: in definition of macro 'module_driver'
     259 | static int __init __driver##_init(void) \
         |                   ^~~~~~~~
   drivers/i2c/busses/i2c-cp2615.c:278:1: note: in expansion of macro 'module_usb_driver'
     278 | module_usb_driver(cp2615_i2c_driver);
         | ^~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors


vim +/cp2615_init_iop_msg +82 drivers/i2c/busses/i2c-cp2615.c

    81	
  > 82	int cp2615_init_iop_msg(struct cp2615_iop_msg *ret, enum cp2615_iop_msg_type msg, const void *data, size_t data_len)
    83	{
    84		if (data_len > MAX_IOP_PAYLOAD_SIZE)
    85			return -EFBIG;
    86	
    87		if (ret) {
    88			ret->preamble = 0x2A2A;
    89			ret->length = htons(data_len+6);
    90			ret->msg = htons(msg);
    91			if(data && data_len)
    92				memcpy(&ret->data, data, data_len);
    93	        return 0;
    94		} else {
    95	        return -EINVAL;
    96		}
    97	}
    98	
  > 99	int cp2615_init_i2c_msg(struct cp2615_iop_msg *ret, const struct cp2615_i2c_transfer *data)
   100	{
   101	    return cp2615_init_iop_msg(ret, iop_DoI2cTransfer, data, 4 + data->write_len);
   102	}
   103	
   104	/* Translates status codes to Linux errno's */
 > 105	int cp2615_check_status(enum cp2615_i2c_status status)
   106	{
   107		switch (status) {
   108		case CP2615_SUCCESS:
   109				return 0;
   110		case CP2615_BUS_ERROR:
   111			return -ECOMM;
   112		case CP2615_BUS_BUSY:
   113			return -EAGAIN;
   114		case CP2615_TIMEOUT:
   115			return -ETIMEDOUT;
   116		case CP2615_INVALID_PARAM:
   117			return -EINVAL;
   118		case CP2615_CFG_LOCKED:
   119			return -EPERM;
   120		}
   121		/* Unknown error code */
   122		return -EPROTO;
   123	}
   124	
   125	
   126	static int
   127	cp2615_i2c_send(struct usb_interface *usbif, struct cp2615_i2c_transfer *i2c_w)
   128	{
   129		struct cp2615_iop_msg *msg = kzalloc(sizeof(struct cp2615_iop_msg), GFP_KERNEL);
   130		struct usb_device *usbdev = interface_to_usbdev(usbif);
   131		int res = cp2615_init_i2c_msg(msg, i2c_w);
   132		if (!res)
   133			res = usb_bulk_msg(usbdev, usb_sndbulkpipe(usbdev, IOP_EP_OUT), msg, ntohs(msg->length), NULL, 0);
   134		kfree(msg);
   135		return res;
   136	}
   137	
   138	static int
   139	cp2615_i2c_recv(struct usb_interface *usbif, unsigned char tag, void *buf)
   140	{
   141		struct cp2615_iop_msg *msg = kzalloc(sizeof(struct cp2615_iop_msg), GFP_KERNEL);
   142		struct cp2615_i2c_transfer_result *i2c_r = (struct cp2615_i2c_transfer_result*) &msg->data;
   143		struct usb_device *usbdev = interface_to_usbdev(usbif);
   144		int res = usb_bulk_msg(usbdev, usb_rcvbulkpipe(usbdev, IOP_EP_IN), msg, sizeof(struct cp2615_iop_msg), NULL, 0);
   145		if (res < 0)
   146			return res;
   147	
   148		if (msg->msg != htons(iop_I2cTransferResult) || i2c_r->tag != tag)
   149			return -EIO;
   150	
   151		res = cp2615_check_status(i2c_r->status);
   152		if (res < 0)
   153			return res;
   154	
   155		memcpy(buf, &i2c_r->data, i2c_r->read_len);
   156		kfree(msg);
   157		return 0;
   158	}
   159	
   160	static int
   161	cp2615_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
   162	{
   163		struct usb_interface *usbif = adap->algo_data;
   164		int i = 0, ret = 0;
   165		struct i2c_msg *msg;
   166		struct cp2615_i2c_transfer i2c_w = {0};
   167		dev_dbg(&usbif->dev, "Doing %d I2C transactions\n", num);
   168	
   169		for(; !ret && i < num; i++) {
   170			msg = &msgs[i];
   171	
   172			i2c_w.tag = 0xdd;
   173			i2c_w.i2caddr = i2c_8bit_addr_from_msg(msg);
   174			if (msg->flags & I2C_M_RD) {
   175				i2c_w.read_len = msg->len;
   176				i2c_w.write_len = 0;
   177			} else {
   178				i2c_w.read_len = 0;
   179				i2c_w.write_len = msg->len;
   180				memcpy(&i2c_w.data, msg->buf, i2c_w.write_len);
   181			}
   182			ret = cp2615_i2c_send(usbif, &i2c_w);
   183			if (ret)
   184				break;
   185			ret = cp2615_i2c_recv(usbif, i2c_w.tag, msg->buf);
   186		}
   187		if (ret < 0)
   188			return ret;
   189		return i;
   190	}
   191	
   192	static u32
   193	cp2615_i2c_func(struct i2c_adapter *adap)
   194	{
   195		return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
   196	}
   197	
   198	static const struct i2c_algorithm cp2615_i2c_algo = {
   199		.master_xfer	= cp2615_i2c_master_xfer,
   200		.functionality	= cp2615_i2c_func,
   201	};
   202	
   203	/*
   204	 * This chip has some limitations: one is that the USB endpoint
   205	 * can only receive 64 bytes/transfer, that leaves 54 bytes for
   206	 * the I2C transfer. On top of that, EITHER read_len OR write_len
   207	 * may be zero, but not both. If both are non-zero, the adapter
   208	 * issues a write followed by a read. And the chip does not
   209	 * support repeated START between the write and read phases.
   210	 *
   211	 * FIXME: There in no quirk flag for specifying that the adapter
   212	 * does not support empty transfers, or that it cannot emit a
   213	 * START condition between the combined phases.
   214	 */
   215	struct i2c_adapter_quirks cp2615_i2c_quirks = {
   216		.max_write_len = MAX_I2C_SIZE,
   217		.max_read_len = MAX_I2C_SIZE,
   218		.flags = I2C_AQ_COMB_WRITE_THEN_READ,
   219		.max_comb_1st_msg_len = MAX_I2C_SIZE,
   220		.max_comb_2nd_msg_len = MAX_I2C_SIZE
   221	};
   222	
   223	static void
   224	cp2615_i2c_remove(struct usb_interface *usbif)
   225	{
   226		struct i2c_adapter *adap = usb_get_intfdata(usbif);
   227	
   228		usb_set_intfdata(usbif, NULL);
   229		i2c_del_adapter(adap);
   230	}
   231	
   232	static int
   233	cp2615_i2c_probe(struct usb_interface *usbif, const struct usb_device_id *id)
   234	{
   235		int ret = 0;
   236		struct i2c_adapter *adap;
   237		struct usb_device *usbdev = interface_to_usbdev(usbif);
   238	
   239		ret = usb_set_interface(usbdev, IOP_IFN, IOP_ALTSETTING);
   240		if (ret)
   241			return ret;
   242	
   243		adap = devm_kzalloc(&usbif->dev, sizeof(struct i2c_adapter), GFP_KERNEL);
   244		if (!adap)
   245			return -ENOMEM;
   246	
   247		strncpy(adap->name, usbdev->serial, sizeof(adap->name));
   248		adap->owner = THIS_MODULE;
   249		adap->dev.parent = &usbif->dev;
   250		adap->dev.of_node = usbif->dev.of_node;
   251		adap->timeout = HZ;
   252		adap->algo = &cp2615_i2c_algo;
   253		adap->quirks = &cp2615_i2c_quirks;
   254		adap->algo_data = usbif;
   255	
   256		ret = i2c_add_adapter(adap);
   257		if (ret)
   258			return ret;
   259	
   260		usb_set_intfdata(usbif, adap);
   261		return ret;
   262	}
   263	
   264	static const struct usb_device_id id_table[] = {
   265		{ USB_DEVICE(CP2615_VID, CP2615_PID) },
   266		{ }
   267	};
   268	
 > 269	MODULE_DEVICE_TABLE(usb, id_table);
   270	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 67374 bytes --]

  reply	other threads:[~2021-03-17 12:26 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-17 10:30 [PATCH v2] Adding i2c-cp2615: i2c support for Silicon Labs' CP2615 Digital Audio Bridge Bence Csókás
2021-03-17 12:24 ` kernel test robot [this message]
2021-03-17 12:24   ` kernel test robot
2021-03-17 12:33 ` Wolfram Sang
2021-03-18  1:55   ` Bence Csókás
2021-03-18  5:59     ` Wolfram Sang
2021-03-17 14:29 ` kernel test robot
2021-03-17 14:29   ` kernel test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202103172057.69FnHH8y-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=bence98@sch.bme.hu \
    --cc=kbuild-all@lists.01.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.