Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

gpio: ftgpio010: shrink code

Use devm_clk_get_enabled() to drop the goto label from probe() and the
entire remove() callback. Drop platform_set_drvdata() as it's no longer
needed. Drop log noise on success.

Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20241017123044.75531-1-brgl@bgdev.pl
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

+9 -36
+9 -36
drivers/gpio/gpio-ftgpio010.c
··· 253 253 if (irq < 0) 254 254 return irq; 255 255 256 - g->clk = devm_clk_get(dev, NULL); 257 - if (!IS_ERR(g->clk)) { 258 - ret = clk_prepare_enable(g->clk); 259 - if (ret) 260 - return ret; 261 - } else if (PTR_ERR(g->clk) == -EPROBE_DEFER) { 256 + g->clk = devm_clk_get_enabled(dev, NULL); 257 + if (IS_ERR(g->clk) && PTR_ERR(g->clk) == -EPROBE_DEFER) 262 258 /* 263 259 * Percolate deferrals, for anything else, 264 260 * just live without the clocking. 265 261 */ 266 262 return PTR_ERR(g->clk); 267 - } 268 263 269 264 ret = bgpio_init(&g->gc, dev, 4, 270 265 g->base + GPIO_DATA_IN, ··· 268 273 g->base + GPIO_DIR, 269 274 NULL, 270 275 0); 271 - if (ret) { 272 - dev_err(dev, "unable to init generic GPIO\n"); 273 - goto dis_clk; 274 - } 276 + if (ret) 277 + return dev_err_probe(dev, ret, "unable to init generic GPIO\n"); 278 + 275 279 g->gc.label = dev_name(dev); 276 280 g->gc.base = -1; 277 281 g->gc.parent = dev; ··· 287 293 girq->num_parents = 1; 288 294 girq->parents = devm_kcalloc(dev, 1, sizeof(*girq->parents), 289 295 GFP_KERNEL); 290 - if (!girq->parents) { 291 - ret = -ENOMEM; 292 - goto dis_clk; 293 - } 296 + if (!girq->parents) 297 + return -ENOMEM; 298 + 294 299 girq->default_type = IRQ_TYPE_NONE; 295 300 girq->handler = handle_bad_irq; 296 301 girq->parents[0] = irq; ··· 302 309 /* Clear any use of debounce */ 303 310 writel(0x0, g->base + GPIO_DEBOUNCE_EN); 304 311 305 - ret = devm_gpiochip_add_data(dev, &g->gc, g); 306 - if (ret) 307 - goto dis_clk; 308 - 309 - platform_set_drvdata(pdev, g); 310 - dev_info(dev, "FTGPIO010 @%p registered\n", g->base); 311 - 312 - return 0; 313 - 314 - dis_clk: 315 - clk_disable_unprepare(g->clk); 316 - 317 - return ret; 318 - } 319 - 320 - static void ftgpio_gpio_remove(struct platform_device *pdev) 321 - { 322 - struct ftgpio_gpio *g = platform_get_drvdata(pdev); 323 - 324 - clk_disable_unprepare(g->clk); 312 + return devm_gpiochip_add_data(dev, &g->gc, g); 325 313 } 326 314 327 315 static const struct of_device_id ftgpio_gpio_of_match[] = { ··· 324 350 .of_match_table = ftgpio_gpio_of_match, 325 351 }, 326 352 .probe = ftgpio_gpio_probe, 327 - .remove = ftgpio_gpio_remove, 328 353 }; 329 354 builtin_platform_driver(ftgpio_gpio_driver);