Message ID | 1521602391-30356-5-git-send-email-aisheng.dong@nxp.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Dong, Thank you for the patch! Yet something to improve: [auto build test ERROR on clk/clk-next] [also build test ERROR on v4.16-rc6 next-20180322] [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/Dong-Aisheng/clk-new-APIs-to-handle-all-available-clocks/20180323-122451 base: https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git clk-next config: i386-randconfig-x007-201811 (attached as .config) compiler: gcc-7 (Debian 7.3.0-1) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=i386 All error/warnings (new ones prefixed by >>): drivers/video/fbdev/simplefb.c: In function 'simplefb_clocks_enable': >> drivers/video/fbdev/simplefb.c:250:42: warning: no return statement in function returning non-void [-Wreturn-type] static int simplefb_clocks_enable(struct simplefb_par *par) { } ^~~~~~~~~~~~ drivers/video/fbdev/simplefb.c: In function 'simplefb_probe': >> drivers/video/fbdev/simplefb.c:442:2: error: too many arguments to function 'simplefb_clocks_enable' simplefb_clocks_enable(par, pdev); ^~~~~~~~~~~~~~~~~~~~~~ drivers/video/fbdev/simplefb.c:250:12: note: declared here static int simplefb_clocks_enable(struct simplefb_par *par) { } ^~~~~~~~~~~~~~~~~~~~~~ vim +/simplefb_clocks_enable +442 drivers/video/fbdev/simplefb.c fc219bfd drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 239 fc219bfd drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 240 static void simplefb_clocks_destroy(struct simplefb_par *par) fc219bfd drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 241 { a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 242 if (par->clks_enabled) 1904158b drivers/video/fbdev/simplefb.c Dong Aisheng 2018-03-21 243 clk_bulk_disable_unprepare(par->clk_count, par->clks); fc219bfd drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 244 1904158b drivers/video/fbdev/simplefb.c Dong Aisheng 2018-03-21 245 clk_bulk_put_all(par->clk_count, par->clks); fc219bfd drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 246 } fc219bfd drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 247 #else a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 248 static int simplefb_clocks_get(struct simplefb_par *par, fc219bfd drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 249 struct platform_device *pdev) { return 0; } 1904158b drivers/video/fbdev/simplefb.c Dong Aisheng 2018-03-21 @250 static int simplefb_clocks_enable(struct simplefb_par *par) { } fc219bfd drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 251 static void simplefb_clocks_destroy(struct simplefb_par *par) { } fc219bfd drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 252 #endif fc219bfd drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 253 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 254 #if defined CONFIG_OF && defined CONFIG_REGULATOR 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 255 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 256 #define SUPPLY_SUFFIX "-supply" 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 257 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 258 /* 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 259 * Regulator handling code. 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 260 * 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 261 * Here we handle the num-supplies and vin*-supply properties of our 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 262 * "simple-framebuffer" dt node. This is necessary so that we can make sure 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 263 * that any regulators needed by the display hardware that the bootloader 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 264 * set up for us (and for which it provided a simplefb dt node), stay up, 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 265 * for the life of the simplefb driver. 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 266 * 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 267 * When the driver unloads, we cleanly disable, and then release the 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 268 * regulators. 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 269 * 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 270 * We only complain about errors here, no action is taken as the most likely 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 271 * error can only happen due to a mismatch between the bootloader which set 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 272 * up simplefb, and the regulator definitions in the device tree. Chances are 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 273 * that there are no adverse effects, and if there are, a clean teardown of 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 274 * the fb probe will not help us much either. So just complain and carry on, 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 275 * and hope that the user actually gets a working fb at the end of things. 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 276 */ a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 277 static int simplefb_regulators_get(struct simplefb_par *par, 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 278 struct platform_device *pdev) 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 279 { 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 280 struct device_node *np = pdev->dev.of_node; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 281 struct property *prop; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 282 struct regulator *regulator; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 283 const char *p; a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 284 int count = 0, i = 0; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 285 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 286 if (dev_get_platdata(&pdev->dev) || !np) 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 287 return 0; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 288 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 289 /* Count the number of regulator supplies */ 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 290 for_each_property_of_node(np, prop) { 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 291 p = strstr(prop->name, SUPPLY_SUFFIX); 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 292 if (p && p != prop->name) 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 293 count++; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 294 } 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 295 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 296 if (!count) 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 297 return 0; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 298 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 299 par->regulators = devm_kcalloc(&pdev->dev, count, 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 300 sizeof(struct regulator *), GFP_KERNEL); 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 301 if (!par->regulators) 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 302 return -ENOMEM; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 303 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 304 /* Get all the regulators */ 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 305 for_each_property_of_node(np, prop) { 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 306 char name[32]; /* 32 is max size of property name */ 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 307 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 308 p = strstr(prop->name, SUPPLY_SUFFIX); 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 309 if (!p || p == prop->name) 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 310 continue; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 311 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 312 strlcpy(name, prop->name, 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 313 strlen(prop->name) - strlen(SUPPLY_SUFFIX) + 1); 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 314 regulator = devm_regulator_get_optional(&pdev->dev, name); 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 315 if (IS_ERR(regulator)) { 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 316 if (PTR_ERR(regulator) == -EPROBE_DEFER) 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 317 return -EPROBE_DEFER; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 318 dev_err(&pdev->dev, "regulator %s not found: %ld\n", 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 319 name, PTR_ERR(regulator)); 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 320 continue; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 321 } 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 322 par->regulators[i++] = regulator; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 323 } 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 324 par->regulator_count = i; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 325 a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 326 return 0; a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 327 } a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 328 a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 329 static void simplefb_regulators_enable(struct simplefb_par *par, a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 330 struct platform_device *pdev) a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 331 { a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 332 int i, ret; a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 333 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 334 /* Enable all the regulators */ 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 335 for (i = 0; i < par->regulator_count; i++) { 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 336 ret = regulator_enable(par->regulators[i]); 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 337 if (ret) { 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 338 dev_err(&pdev->dev, 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 339 "failed to enable regulator %d: %d\n", 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 340 i, ret); 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 341 devm_regulator_put(par->regulators[i]); 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 342 par->regulators[i] = NULL; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 343 } 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 344 } a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 345 par->regulators_enabled = true; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 346 } 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 347 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 348 static void simplefb_regulators_destroy(struct simplefb_par *par) 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 349 { 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 350 int i; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 351 a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 352 if (!par->regulators || !par->regulators_enabled) 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 353 return; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 354 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 355 for (i = 0; i < par->regulator_count; i++) 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 356 if (par->regulators[i]) 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 357 regulator_disable(par->regulators[i]); 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 358 } 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 359 #else a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 360 static int simplefb_regulators_get(struct simplefb_par *par, 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 361 struct platform_device *pdev) { return 0; } a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 362 static void simplefb_regulators_enable(struct simplefb_par *par, a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 363 struct platform_device *pdev) { } 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 364 static void simplefb_regulators_destroy(struct simplefb_par *par) { } 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 365 #endif 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 366 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 367 static int simplefb_probe(struct platform_device *pdev) 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 368 { 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 369 int ret; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 370 struct simplefb_params params; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 371 struct fb_info *info; 1270be4a drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 372 struct simplefb_par *par; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 373 struct resource *mem; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 374 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 375 if (fb_get_options("simplefb", NULL)) 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 376 return -ENODEV; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 377 5ef76da6 drivers/video/simplefb.c David Herrmann 2013-08-02 378 ret = -ENODEV; 129f1be4 drivers/video/simplefb.c Jingoo Han 2013-09-17 379 if (dev_get_platdata(&pdev->dev)) 5ef76da6 drivers/video/simplefb.c David Herrmann 2013-08-02 380 ret = simplefb_parse_pd(pdev, ¶ms); 5ef76da6 drivers/video/simplefb.c David Herrmann 2013-08-02 381 else if (pdev->dev.of_node) 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 382 ret = simplefb_parse_dt(pdev, ¶ms); 5ef76da6 drivers/video/simplefb.c David Herrmann 2013-08-02 383 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 384 if (ret) 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 385 return ret; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 386 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 387 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 388 if (!mem) { 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 389 dev_err(&pdev->dev, "No memory resource\n"); 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 390 return -EINVAL; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 391 } 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 392 1270be4a drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 393 info = framebuffer_alloc(sizeof(struct simplefb_par), &pdev->dev); 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 394 if (!info) 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 395 return -ENOMEM; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 396 platform_set_drvdata(pdev, info); 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 397 1270be4a drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 398 par = info->par; 1270be4a drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 399 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 400 info->fix = simplefb_fix; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 401 info->fix.smem_start = mem->start; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 402 info->fix.smem_len = resource_size(mem); 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 403 info->fix.line_length = params.stride; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 404 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 405 info->var = simplefb_var; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 406 info->var.xres = params.width; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 407 info->var.yres = params.height; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 408 info->var.xres_virtual = params.width; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 409 info->var.yres_virtual = params.height; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 410 info->var.bits_per_pixel = params.format->bits_per_pixel; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 411 info->var.red = params.format->red; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 412 info->var.green = params.format->green; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 413 info->var.blue = params.format->blue; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 414 info->var.transp = params.format->transp; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 415 df0960ab drivers/video/simplefb.c David Herrmann 2013-08-02 416 info->apertures = alloc_apertures(1); df0960ab drivers/video/simplefb.c David Herrmann 2013-08-02 417 if (!info->apertures) { bf2fda15 drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 418 ret = -ENOMEM; bf2fda15 drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 419 goto error_fb_release; df0960ab drivers/video/simplefb.c David Herrmann 2013-08-02 420 } df0960ab drivers/video/simplefb.c David Herrmann 2013-08-02 421 info->apertures->ranges[0].base = info->fix.smem_start; df0960ab drivers/video/simplefb.c David Herrmann 2013-08-02 422 info->apertures->ranges[0].size = info->fix.smem_len; df0960ab drivers/video/simplefb.c David Herrmann 2013-08-02 423 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 424 info->fbops = &simplefb_ops; df0960ab drivers/video/simplefb.c David Herrmann 2013-08-02 425 info->flags = FBINFO_DEFAULT | FBINFO_MISC_FIRMWARE; 9e210be6 drivers/video/simplefb.c David Herrmann 2013-10-02 426 info->screen_base = ioremap_wc(info->fix.smem_start, 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 427 info->fix.smem_len); 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 428 if (!info->screen_base) { bf2fda15 drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 429 ret = -ENOMEM; bf2fda15 drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 430 goto error_fb_release; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 431 } 1270be4a drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 432 info->pseudo_palette = par->palette; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 433 a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 434 ret = simplefb_clocks_get(par, pdev); fc219bfd drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 435 if (ret < 0) fc219bfd drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 436 goto error_unmap; fc219bfd drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 437 a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 438 ret = simplefb_regulators_get(par, pdev); 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 439 if (ret < 0) 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 440 goto error_clocks; 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 441 a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 @442 simplefb_clocks_enable(par, pdev); a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 443 simplefb_regulators_enable(par, pdev); a3accfd7 drivers/video/fbdev/simplefb.c Hans de Goede 2017-01-11 444 9f192a92 drivers/video/simplefb.c Tom Gundersen 2013-09-07 445 dev_info(&pdev->dev, "framebuffer at 0x%lx, 0x%x bytes, mapped to 0x%p\n", 9f192a92 drivers/video/simplefb.c Tom Gundersen 2013-09-07 446 info->fix.smem_start, info->fix.smem_len, 9f192a92 drivers/video/simplefb.c Tom Gundersen 2013-09-07 447 info->screen_base); 9f192a92 drivers/video/simplefb.c Tom Gundersen 2013-09-07 448 dev_info(&pdev->dev, "format=%s, mode=%dx%dx%d, linelength=%d\n", 9f192a92 drivers/video/simplefb.c Tom Gundersen 2013-09-07 449 params.format->name, 9f192a92 drivers/video/simplefb.c Tom Gundersen 2013-09-07 450 info->var.xres, info->var.yres, 9f192a92 drivers/video/simplefb.c Tom Gundersen 2013-09-07 451 info->var.bits_per_pixel, info->fix.line_length); 9f192a92 drivers/video/simplefb.c Tom Gundersen 2013-09-07 452 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 453 ret = register_framebuffer(info); 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 454 if (ret < 0) { 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 455 dev_err(&pdev->dev, "Unable to register simplefb: %d\n", ret); 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 456 goto error_regulators; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 457 } 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 458 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 459 dev_info(&pdev->dev, "fb%d: simplefb registered!\n", info->node); 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 460 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 461 return 0; bf2fda15 drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 462 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 463 error_regulators: 814740e7 drivers/video/fbdev/simplefb.c Chen-Yu Tsai 2015-11-17 464 simplefb_regulators_destroy(par); fc219bfd drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 465 error_clocks: fc219bfd drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 466 simplefb_clocks_destroy(par); bf2fda15 drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 467 error_unmap: bf2fda15 drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 468 iounmap(info->screen_base); bf2fda15 drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 469 error_fb_release: bf2fda15 drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 470 framebuffer_release(info); bf2fda15 drivers/video/fbdev/simplefb.c Luc Verhaegen 2014-11-14 471 return ret; 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 472 } 26549c8d drivers/video/simplefb.c Stephen Warren 2013-05-24 473 :::::: The code at line 442 was first introduced by commit :::::: a3accfd70e166af4956a686ffcdf414702c0a13e video: fbdev: simplefb: Separate clk / regulator get and enable steps :::::: TO: Hans de Goede <hdegoede@redhat.com> :::::: CC: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
diff --git a/drivers/video/fbdev/simplefb.c b/drivers/video/fbdev/simplefb.c index a3c44ec..3c8124e 100644 --- a/drivers/video/fbdev/simplefb.c +++ b/drivers/video/fbdev/simplefb.c @@ -182,7 +182,7 @@ struct simplefb_par { #if defined CONFIG_OF && defined CONFIG_COMMON_CLK bool clks_enabled; unsigned int clk_count; - struct clk **clks; + struct clk_bulk_data *clks; #endif #if defined CONFIG_OF && defined CONFIG_REGULATOR bool regulators_enabled; @@ -214,37 +214,13 @@ static int simplefb_clocks_get(struct simplefb_par *par, struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; - struct clk *clock; - int i; if (dev_get_platdata(&pdev->dev) || !np) return 0; - par->clk_count = of_clk_get_parent_count(np); - if (!par->clk_count) - return 0; - - par->clks = kcalloc(par->clk_count, sizeof(struct clk *), GFP_KERNEL); - if (!par->clks) - return -ENOMEM; - - for (i = 0; i < par->clk_count; i++) { - clock = of_clk_get(np, i); - if (IS_ERR(clock)) { - if (PTR_ERR(clock) == -EPROBE_DEFER) { - while (--i >= 0) { - if (par->clks[i]) - clk_put(par->clks[i]); - } - kfree(par->clks); - return -EPROBE_DEFER; - } - dev_err(&pdev->dev, "%s: clock %d not found: %ld\n", - __func__, i, PTR_ERR(clock)); - continue; - } - par->clks[i] = clock; - } + par->clk_count = clk_bulk_get_all(&pdev->dev, &par->clks); + if ((par->clk_count < 0) && (par->clk_count == -EPROBE_DEFER)) + return -EPROBE_DEFER; return 0; } @@ -252,45 +228,26 @@ static int simplefb_clocks_get(struct simplefb_par *par, static void simplefb_clocks_enable(struct simplefb_par *par, struct platform_device *pdev) { - int i, ret; + int ret; + + ret = clk_bulk_prepare_enable(par->clk_count, par->clks); + if (ret) + dev_warn(&pdev->dev, "failed to enable clocks\n"); - for (i = 0; i < par->clk_count; i++) { - if (par->clks[i]) { - ret = clk_prepare_enable(par->clks[i]); - if (ret) { - dev_err(&pdev->dev, - "%s: failed to enable clock %d: %d\n", - __func__, i, ret); - clk_put(par->clks[i]); - par->clks[i] = NULL; - } - } - } par->clks_enabled = true; } static void simplefb_clocks_destroy(struct simplefb_par *par) { - int i; - - if (!par->clks) - return; + if (par->clks_enabled) + clk_bulk_disable_unprepare(par->clk_count, par->clks); - for (i = 0; i < par->clk_count; i++) { - if (par->clks[i]) { - if (par->clks_enabled) - clk_disable_unprepare(par->clks[i]); - clk_put(par->clks[i]); - } - } - - kfree(par->clks); + clk_bulk_put_all(par->clk_count, par->clks); } #else static int simplefb_clocks_get(struct simplefb_par *par, struct platform_device *pdev) { return 0; } -static void simplefb_clocks_enable(struct simplefb_par *par, - struct platform_device *pdev) { } +static int simplefb_clocks_enable(struct simplefb_par *par) { } static void simplefb_clocks_destroy(struct simplefb_par *par) { } #endif
Switching to use clk_bulk API to simplify clock operations. Cc: Hans de Goede <hdegoede@redhat.com> Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> Cc: linux-fbdev@vger.kernel.org Cc: Masahiro Yamada <yamada.masahiro@socionext.com> Cc: Stephen Boyd <sboyd@codeaurora.org> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com> --- v1->v2: * switch to clk_bulk_get_all from of_clk_bulk_get_all --- drivers/video/fbdev/simplefb.c | 69 ++++++++---------------------------------- 1 file changed, 13 insertions(+), 56 deletions(-)