Hi Maxime, [auto build test ERROR on linuxtv-media/master] [also build test ERROR on v4.13-rc1 next-20170721] [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/Maxime-Ripard/media-v4l-Add-support-for-the-Cadence-MIPI-CSI2-RX/20170723-083419 base: git://linuxtv.org/media_tree.git master config: ia64-allmodconfig (attached as .config) compiler: ia64-linux-gcc (GCC) 6.2.0 reproduce: wget https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=ia64 All error/warnings (new ones prefixed by >>): drivers/media/platform/cadence/cdns-csi2rx.c: In function 'csi2rx_async_bound': >> drivers/media/platform/cadence/cdns-csi2rx.c:169:31: error: implicit declaration of function 'subnotifier_to_v4l2_subdev' [-Werror=implicit-function-declaration] struct v4l2_subdev *subdev = subnotifier_to_v4l2_subdev(notifier); ^~~~~~~~~~~~~~~~~~~~~~~~~~ >> drivers/media/platform/cadence/cdns-csi2rx.c:169:31: warning: initialization makes pointer from integer without a cast [-Wint-conversion] drivers/media/platform/cadence/cdns-csi2rx.c: In function 'csi2rx_async_complete': drivers/media/platform/cadence/cdns-csi2rx.c:191:31: warning: initialization makes pointer from integer without a cast [-Wint-conversion] struct v4l2_subdev *subdev = subnotifier_to_v4l2_subdev(notifier); ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/platform/cadence/cdns-csi2rx.c: In function 'csi2rx_async_unbind': drivers/media/platform/cadence/cdns-csi2rx.c:205:31: warning: initialization makes pointer from integer without a cast [-Wint-conversion] struct v4l2_subdev *subdev = subnotifier_to_v4l2_subdev(notifier); ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/platform/cadence/cdns-csi2rx.c: In function 'csi2rx_parse_dt': >> drivers/media/platform/cadence/cdns-csi2rx.c:324:8: error: implicit declaration of function 'v4l2_async_subdev_notifier_register' [-Werror=implicit-function-declaration] ret = v4l2_async_subdev_notifier_register(&csi2rx->subdev, 1, subdevs, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +/subnotifier_to_v4l2_subdev +169 drivers/media/platform/cadence/cdns-csi2rx.c 164 165 static int csi2rx_async_bound(struct v4l2_async_notifier *notifier, 166 struct v4l2_subdev *s_subdev, 167 struct v4l2_async_subdev *asd) 168 { > 169 struct v4l2_subdev *subdev = subnotifier_to_v4l2_subdev(notifier); 170 struct csi2rx_priv *csi2rx = v4l2_subdev_to_csi2rx(subdev); 171 172 csi2rx->sensor_pad = media_entity_get_fwnode_pad(&s_subdev->entity, 173 &csi2rx->sensor_node->fwnode, 174 MEDIA_PAD_FL_SOURCE); 175 if (csi2rx->sensor_pad < 0) { 176 dev_err(csi2rx->dev, "Couldn't find output pad for subdev %s\n", 177 s_subdev->name); 178 return csi2rx->sensor_pad; 179 } 180 181 csi2rx->sensor_subdev = s_subdev; 182 183 dev_dbg(csi2rx->dev, "Bound %s pad: %d\n", s_subdev->name, 184 csi2rx->sensor_pad); 185 186 return 0; 187 } 188 189 static int csi2rx_async_complete(struct v4l2_async_notifier *notifier) 190 { > 191 struct v4l2_subdev *subdev = subnotifier_to_v4l2_subdev(notifier); 192 struct csi2rx_priv *csi2rx = v4l2_subdev_to_csi2rx(subdev); 193 194 return media_create_pad_link(&csi2rx->sensor_subdev->entity, 195 csi2rx->sensor_pad, 196 &csi2rx->subdev.entity, 0, 197 MEDIA_LNK_FL_ENABLED | 198 MEDIA_LNK_FL_IMMUTABLE); 199 } 200 201 static void csi2rx_async_unbind(struct v4l2_async_notifier *notifier, 202 struct v4l2_subdev *s_subdev, 203 struct v4l2_async_subdev *asd) 204 { 205 struct v4l2_subdev *subdev = subnotifier_to_v4l2_subdev(notifier); 206 struct csi2rx_priv *csi2rx = v4l2_subdev_to_csi2rx(subdev); 207 208 dev_dbg(csi2rx->dev, "Unbound %s pad: %d\n", s_subdev->name, 209 csi2rx->sensor_pad); 210 211 csi2rx->sensor_subdev = NULL; 212 csi2rx->sensor_pad = -EINVAL; 213 } 214 215 static int csi2rx_get_resources(struct csi2rx_priv *csi2rx, 216 struct platform_device *pdev) 217 { 218 struct resource *res; 219 u32 reg; 220 int i; 221 222 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 223 csi2rx->base = devm_ioremap_resource(&pdev->dev, res); 224 if (IS_ERR(csi2rx->base)) { 225 dev_err(&pdev->dev, "Couldn't map our registers\n"); 226 return PTR_ERR(csi2rx->base); 227 } 228 229 reg = readl(csi2rx->base + CSI2RX_DEVICE_CFG_REG); 230 csi2rx->max_lanes = (reg & 7) + 1; 231 csi2rx->max_streams = ((reg >> 4) & 7); 232 csi2rx->cdns_dphy = reg & BIT(3); 233 234 csi2rx->sys_clk = devm_clk_get(&pdev->dev, "sys_clk"); 235 if (IS_ERR(csi2rx->sys_clk)) { 236 dev_err(&pdev->dev, "Couldn't get sys clock\n"); 237 return PTR_ERR(csi2rx->sys_clk); 238 } 239 240 csi2rx->p_clk = devm_clk_get(&pdev->dev, "p_clk"); 241 if (IS_ERR(csi2rx->p_clk)) { 242 dev_err(&pdev->dev, "Couldn't get P clock\n"); 243 return PTR_ERR(csi2rx->p_clk); 244 } 245 246 csi2rx->p_free_clk = devm_clk_get(&pdev->dev, "p_free_clk"); 247 if (IS_ERR(csi2rx->p_free_clk)) { 248 dev_err(&pdev->dev, "Couldn't get free running P clock\n"); 249 return PTR_ERR(csi2rx->p_free_clk); 250 } 251 252 for (i = 0; i < csi2rx->max_streams; i++) { 253 char clk_name[16]; 254 255 snprintf(clk_name, sizeof(clk_name), "pixel_if%u_clk", i); 256 csi2rx->pixel_clk[i] = devm_clk_get(&pdev->dev, clk_name); 257 if (IS_ERR(csi2rx->pixel_clk[i])) { 258 dev_err(&pdev->dev, "Couldn't get clock %s\n", clk_name); 259 return PTR_ERR(csi2rx->pixel_clk[i]); 260 } 261 } 262 263 if (csi2rx->cdns_dphy) { 264 csi2rx->dphy_rx_clk = devm_clk_get(&pdev->dev, "dphy_rx_clk"); 265 if (IS_ERR(csi2rx->dphy_rx_clk)) { 266 dev_err(&pdev->dev, "Couldn't get D-PHY RX clock\n"); 267 return PTR_ERR(csi2rx->dphy_rx_clk); 268 } 269 } 270 271 return 0; 272 } 273 274 static int csi2rx_parse_dt(struct csi2rx_priv *csi2rx) 275 { 276 struct v4l2_fwnode_endpoint v4l2_ep; 277 struct v4l2_async_subdev **subdevs; 278 struct device_node *ep, *remote; 279 int ret = 0; 280 281 ep = of_graph_get_endpoint_by_regs(csi2rx->dev->of_node, 0, 0); 282 if (!ep) 283 return -EINVAL; 284 285 ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(ep), &v4l2_ep); 286 if (ret) { 287 dev_err(csi2rx->dev, "Could not parse v4l2 endpoint\n"); 288 goto out; 289 } 290 291 if (v4l2_ep.bus_type != V4L2_MBUS_CSI2) { 292 dev_err(csi2rx->dev, "Unsupported media bus type: 0x%x\n", 293 v4l2_ep.bus_type); 294 ret = -EINVAL; 295 goto out; 296 } 297 298 csi2rx->lanes = v4l2_ep.bus.mipi_csi2.num_data_lanes; 299 if (csi2rx->lanes > csi2rx->max_lanes) { 300 dev_err(csi2rx->dev, "Unsupported number of data-lanes: %d\n", 301 csi2rx->lanes); 302 ret = -EINVAL; 303 goto out; 304 } 305 306 remote = of_graph_get_remote_port_parent(ep); 307 if (!remote) { 308 dev_err(csi2rx->dev, "No device found for endpoint %pOF\n", ep); 309 ret = -EINVAL; 310 goto out; 311 } 312 313 dev_dbg(csi2rx->dev, "Found remote device %pOF\n", remote); 314 315 csi2rx->sensor_node = remote; 316 csi2rx->asd.match.fwnode.fwnode = &remote->fwnode; 317 csi2rx->asd.match_type = V4L2_ASYNC_MATCH_FWNODE; 318 319 subdevs = devm_kzalloc(csi2rx->dev, sizeof(*subdevs), GFP_KERNEL); 320 if (subdevs == NULL) 321 return -ENOMEM; 322 subdevs[0] = &csi2rx->asd; 323 > 324 ret = v4l2_async_subdev_notifier_register(&csi2rx->subdev, 1, subdevs, 325 csi2rx_async_bound, 326 csi2rx_async_complete, 327 csi2rx_async_unbind); 328 if (ret < 0) { 329 dev_err(csi2rx->dev, "Failed to register our notifier\n"); 330 return ret; 331 } 332 333 out: 334 of_node_put(ep); 335 return ret; 336 } 337 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip