[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <202508130917.FKIv8K4Z-lkp@intel.com>
Date: Wed, 13 Aug 2025 09:28:55 +0800
From: kernel test robot <lkp@...el.com>
To: Alexander Smirnov <asmirnou@...efeat.co.uk>, mchehab@...nel.org,
robh@...nel.org, krzk+dt@...nel.org, conor+dt@...nel.org
Cc: oe-kbuild-all@...ts.linux.dev, devicetree@...r.kernel.org,
linux-media@...r.kernel.org, linux-kernel@...r.kernel.org,
Aliaksandr Smirnou <support@...efeat.co.uk>
Subject: Re: [PATCH v2 2/2] media/i2c: Pinefeat cef168 lens control board
driver
Hi Alexander,
kernel test robot noticed the following build warnings:
[auto build test WARNING on 2b38afce25c4e1b8f943ff4f0a2b51d6c40f2ed2]
url: https://github.com/intel-lab-lkp/linux/commits/Alexander-Smirnov/dt-bindings-Pinefeat-cef168-lens-control-board/20250812-053441
base: 2b38afce25c4e1b8f943ff4f0a2b51d6c40f2ed2
patch link: https://lore.kernel.org/r/20250811213102.15703-3-aliaksandr.smirnou%40gmail.com
patch subject: [PATCH v2 2/2] media/i2c: Pinefeat cef168 lens control board driver
config: arm64-randconfig-r132-20250813 (https://download.01.org/0day-ci/archive/20250813/202508130917.FKIv8K4Z-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 12.5.0
reproduce: (https://download.01.org/0day-ci/archive/20250813/202508130917.FKIv8K4Z-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@...el.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508130917.FKIv8K4Z-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
>> drivers/media/i2c/cef168.c:37:13: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [usertype] val @@ got restricted __le16 [usertype] @@
drivers/media/i2c/cef168.c:37:13: sparse: expected unsigned short [usertype] val
drivers/media/i2c/cef168.c:37:13: sparse: got restricted __le16 [usertype]
>> drivers/media/i2c/cef168.c:76:32: sparse: sparse: cast to restricted __le16
>> drivers/media/i2c/cef168.c:76:32: sparse: sparse: cast to restricted __le16
>> drivers/media/i2c/cef168.c:76:32: sparse: sparse: cast to restricted __le16
>> drivers/media/i2c/cef168.c:76:32: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:77:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:77:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:77:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:77:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:78:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:78:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:78:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:78:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:79:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:79:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:79:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:79:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:80:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:80:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:80:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:80:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:81:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:81:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:81:39: sparse: sparse: cast to restricted __le16
drivers/media/i2c/cef168.c:81:39: sparse: sparse: cast to restricted __le16
>> drivers/media/i2c/cef168.c:133:30: sparse: sparse: cast to restricted __le32
>> drivers/media/i2c/cef168.c:133:30: sparse: sparse: cast to restricted __le32
>> drivers/media/i2c/cef168.c:133:30: sparse: sparse: cast to restricted __le32
>> drivers/media/i2c/cef168.c:133:30: sparse: sparse: cast to restricted __le32
>> drivers/media/i2c/cef168.c:133:30: sparse: sparse: cast to restricted __le32
>> drivers/media/i2c/cef168.c:133:30: sparse: sparse: cast to restricted __le32
vim +37 drivers/media/i2c/cef168.c
31
32 static int cef168_i2c_write(struct cef168_device *cef168_dev, u8 cmd, u16 val)
33 {
34 struct i2c_client *client = v4l2_get_subdevdata(&cef168_dev->sd);
35 int retry, ret;
36
> 37 val = cpu_to_le16(val);
38 char tx_data[4] = { cmd, (val & 0xff), (val >> 8) };
39
40 tx_data[3] = crc8(cef168_crc8_table, tx_data, 3, CRC8_INIT_VALUE);
41
42 for (retry = 0; retry < 3; retry++) {
43 ret = i2c_master_send(client, tx_data, sizeof(tx_data));
44 if (ret == sizeof(tx_data))
45 return 0;
46 else if (ret != -EIO && ret != -EREMOTEIO)
47 break;
48 }
49
50 dev_err(&client->dev, "I2C write fail after %d retries, ret=%d\n",
51 retry, ret);
52 return -EIO;
53 }
54
55 static int cef168_i2c_read(struct cef168_device *cef168_dev,
56 struct cef168_data *rx_data)
57 {
58 struct i2c_client *client = v4l2_get_subdevdata(&cef168_dev->sd);
59
60 int ret = i2c_master_recv(client, (char *)rx_data,
61 sizeof(struct cef168_data));
62 if (ret != sizeof(struct cef168_data)) {
63 dev_err(&client->dev, "I2C read fail, ret=%d\n", ret);
64 return -EIO;
65 }
66
67 u8 computed_crc = crc8(cef168_crc8_table, (const u8 *)rx_data,
68 sizeof(struct cef168_data) - 1, CRC8_INIT_VALUE);
69 if (computed_crc != rx_data->crc8) {
70 dev_err(&client->dev,
71 "CRC mismatch calculated=0x%02X read=0x%02X\n",
72 computed_crc, rx_data->crc8);
73 return -EIO;
74 }
75
> 76 rx_data->moving_time = le16_to_cpu(rx_data->moving_time);
77 rx_data->focus_position_min = le16_to_cpu(rx_data->focus_position_min);
78 rx_data->focus_position_max = le16_to_cpu(rx_data->focus_position_max);
79 rx_data->focus_position_cur = le16_to_cpu(rx_data->focus_position_cur);
80 rx_data->focus_distance_min = le16_to_cpu(rx_data->focus_distance_min);
81 rx_data->focus_distance_max = le16_to_cpu(rx_data->focus_distance_max);
82
83 return 0;
84 }
85
86 static int cef168_set_ctrl(struct v4l2_ctrl *ctrl)
87 {
88 struct cef168_device *dev = to_cef168(ctrl);
89 u8 cmd;
90
91 switch (ctrl->id) {
92 case V4L2_CID_FOCUS_ABSOLUTE:
93 return cef168_i2c_write(dev, INP_SET_FOCUS, ctrl->val);
94 case V4L2_CID_FOCUS_RELATIVE:
95 cmd = ctrl->val < 0 ? INP_SET_FOCUS_N : INP_SET_FOCUS_P;
96 return cef168_i2c_write(dev, cmd, abs(ctrl->val));
97 case V4L2_CID_IRIS_ABSOLUTE:
98 return cef168_i2c_write(dev, INP_SET_APERTURE, ctrl->val);
99 case V4L2_CID_IRIS_RELATIVE:
100 cmd = ctrl->val < 0 ? INP_SET_APERTURE_N : INP_SET_APERTURE_P;
101 return cef168_i2c_write(dev, cmd, abs(ctrl->val));
102 case CEF168_V4L2_CID_CUSTOM(calibrate):
103 return cef168_i2c_write(dev, INP_CALIBRATE, 0);
104 return 0;
105 }
106
107 return -EINVAL;
108 }
109
110 static int cef168_get_ctrl(struct v4l2_ctrl *ctrl)
111 {
112 struct cef168_device *dev = to_cef168(ctrl);
113 int rval;
114
115 if (ctrl->id != V4L2_CID_FOCUS_ABSOLUTE &&
116 ctrl->id != CEF168_V4L2_CID_CUSTOM(data) &&
117 ctrl->id != CEF168_V4L2_CID_CUSTOM(focus_range) &&
118 ctrl->id != CEF168_V4L2_CID_CUSTOM(lens_id))
119 return -EINVAL;
120
121 struct cef168_data data;
122
123 rval = cef168_i2c_read(dev, &data);
124 if (rval < 0)
125 return rval;
126
127 switch (ctrl->id) {
128 case V4L2_CID_FOCUS_ABSOLUTE:
129 ctrl->val = data.focus_position_cur;
130 return 0;
131 case CEF168_V4L2_CID_CUSTOM(focus_range):
132 ctrl->p_new.p_u32[0] =
> 133 (u32)le32_to_cpu(((u32)data.focus_position_min << 16) |
134 data.focus_position_max);
135 return 0;
136 case CEF168_V4L2_CID_CUSTOM(lens_id):
137 ctrl->p_new.p_u8[0] = data.lens_id;
138 return 0;
139 case CEF168_V4L2_CID_CUSTOM(data):
140 memcpy(ctrl->p_new.p_u8, &data, sizeof(data));
141 return 0;
142 }
143
144 return -EINVAL;
145 }
146
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Powered by blists - more mailing lists