hc
2023-12-06 08f87f769b595151be1afeff53e144f543faa614
kernel/drivers/char/ipmi/bt-bmc.c
....@@ -399,15 +399,15 @@
399399 struct device *dev = &pdev->dev;
400400 int rc;
401401
402
- bt_bmc->irq = platform_get_irq(pdev, 0);
403
- if (!bt_bmc->irq)
404
- return -ENODEV;
402
+ bt_bmc->irq = platform_get_irq_optional(pdev, 0);
403
+ if (bt_bmc->irq < 0)
404
+ return bt_bmc->irq;
405405
406406 rc = devm_request_irq(dev, bt_bmc->irq, bt_bmc_irq, IRQF_SHARED,
407407 DEVICE_NAME, bt_bmc);
408408 if (rc < 0) {
409409 dev_warn(dev, "Unable to request IRQ %d\n", bt_bmc->irq);
410
- bt_bmc->irq = 0;
410
+ bt_bmc->irq = rc;
411411 return rc;
412412 }
413413
....@@ -430,9 +430,6 @@
430430 struct device *dev;
431431 int rc;
432432
433
- if (!pdev || !pdev->dev.of_node)
434
- return -ENODEV;
435
-
436433 dev = &pdev->dev;
437434 dev_info(dev, "Found bt bmc device\n");
438435
....@@ -444,15 +441,13 @@
444441
445442 bt_bmc->map = syscon_node_to_regmap(pdev->dev.parent->of_node);
446443 if (IS_ERR(bt_bmc->map)) {
447
- struct resource *res;
448444 void __iomem *base;
449445
450446 /*
451447 * Assume it's not the MFD-based devicetree description, in
452448 * which case generate a regmap ourselves
453449 */
454
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
455
- base = devm_ioremap_resource(&pdev->dev, res);
450
+ base = devm_platform_ioremap_resource(pdev, 0);
456451 if (IS_ERR(base))
457452 return PTR_ERR(base);
458453
....@@ -468,9 +463,9 @@
468463 init_waitqueue_head(&bt_bmc->queue);
469464
470465 bt_bmc->miscdev.minor = MISC_DYNAMIC_MINOR,
471
- bt_bmc->miscdev.name = DEVICE_NAME,
472
- bt_bmc->miscdev.fops = &bt_bmc_fops,
473
- bt_bmc->miscdev.parent = dev;
466
+ bt_bmc->miscdev.name = DEVICE_NAME,
467
+ bt_bmc->miscdev.fops = &bt_bmc_fops,
468
+ bt_bmc->miscdev.parent = dev;
474469 rc = misc_register(&bt_bmc->miscdev);
475470 if (rc) {
476471 dev_err(dev, "Unable to register misc device\n");
....@@ -479,7 +474,7 @@
479474
480475 bt_bmc_config_irq(bt_bmc, pdev);
481476
482
- if (bt_bmc->irq) {
477
+ if (bt_bmc->irq >= 0) {
483478 dev_info(dev, "Using IRQ %d\n", bt_bmc->irq);
484479 } else {
485480 dev_info(dev, "No IRQ; using timer\n");
....@@ -505,7 +500,7 @@
505500 struct bt_bmc *bt_bmc = dev_get_drvdata(&pdev->dev);
506501
507502 misc_deregister(&bt_bmc->miscdev);
508
- if (!bt_bmc->irq)
503
+ if (bt_bmc->irq < 0)
509504 del_timer_sync(&bt_bmc->poll_timer);
510505 return 0;
511506 }