| .. | .. |
|---|
| 399 | 399 | struct device *dev = &pdev->dev; |
|---|
| 400 | 400 | int rc; |
|---|
| 401 | 401 | |
|---|
| 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; |
|---|
| 405 | 405 | |
|---|
| 406 | 406 | rc = devm_request_irq(dev, bt_bmc->irq, bt_bmc_irq, IRQF_SHARED, |
|---|
| 407 | 407 | DEVICE_NAME, bt_bmc); |
|---|
| 408 | 408 | if (rc < 0) { |
|---|
| 409 | 409 | dev_warn(dev, "Unable to request IRQ %d\n", bt_bmc->irq); |
|---|
| 410 | | - bt_bmc->irq = 0; |
|---|
| 410 | + bt_bmc->irq = rc; |
|---|
| 411 | 411 | return rc; |
|---|
| 412 | 412 | } |
|---|
| 413 | 413 | |
|---|
| .. | .. |
|---|
| 430 | 430 | struct device *dev; |
|---|
| 431 | 431 | int rc; |
|---|
| 432 | 432 | |
|---|
| 433 | | - if (!pdev || !pdev->dev.of_node) |
|---|
| 434 | | - return -ENODEV; |
|---|
| 435 | | - |
|---|
| 436 | 433 | dev = &pdev->dev; |
|---|
| 437 | 434 | dev_info(dev, "Found bt bmc device\n"); |
|---|
| 438 | 435 | |
|---|
| .. | .. |
|---|
| 444 | 441 | |
|---|
| 445 | 442 | bt_bmc->map = syscon_node_to_regmap(pdev->dev.parent->of_node); |
|---|
| 446 | 443 | if (IS_ERR(bt_bmc->map)) { |
|---|
| 447 | | - struct resource *res; |
|---|
| 448 | 444 | void __iomem *base; |
|---|
| 449 | 445 | |
|---|
| 450 | 446 | /* |
|---|
| 451 | 447 | * Assume it's not the MFD-based devicetree description, in |
|---|
| 452 | 448 | * which case generate a regmap ourselves |
|---|
| 453 | 449 | */ |
|---|
| 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); |
|---|
| 456 | 451 | if (IS_ERR(base)) |
|---|
| 457 | 452 | return PTR_ERR(base); |
|---|
| 458 | 453 | |
|---|
| .. | .. |
|---|
| 468 | 463 | init_waitqueue_head(&bt_bmc->queue); |
|---|
| 469 | 464 | |
|---|
| 470 | 465 | 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; |
|---|
| 474 | 469 | rc = misc_register(&bt_bmc->miscdev); |
|---|
| 475 | 470 | if (rc) { |
|---|
| 476 | 471 | dev_err(dev, "Unable to register misc device\n"); |
|---|
| .. | .. |
|---|
| 479 | 474 | |
|---|
| 480 | 475 | bt_bmc_config_irq(bt_bmc, pdev); |
|---|
| 481 | 476 | |
|---|
| 482 | | - if (bt_bmc->irq) { |
|---|
| 477 | + if (bt_bmc->irq >= 0) { |
|---|
| 483 | 478 | dev_info(dev, "Using IRQ %d\n", bt_bmc->irq); |
|---|
| 484 | 479 | } else { |
|---|
| 485 | 480 | dev_info(dev, "No IRQ; using timer\n"); |
|---|
| .. | .. |
|---|
| 505 | 500 | struct bt_bmc *bt_bmc = dev_get_drvdata(&pdev->dev); |
|---|
| 506 | 501 | |
|---|
| 507 | 502 | misc_deregister(&bt_bmc->miscdev); |
|---|
| 508 | | - if (!bt_bmc->irq) |
|---|
| 503 | + if (bt_bmc->irq < 0) |
|---|
| 509 | 504 | del_timer_sync(&bt_bmc->poll_timer); |
|---|
| 510 | 505 | return 0; |
|---|
| 511 | 506 | } |
|---|