mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/
synced 2026-04-18 06:33:43 -04:00
Merge tag 'irq-cleanups-2026-02-09' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq cleanups from Thomas Gleixner:
"A series of treewide cleanups to ensure interrupt request consistency.
- Add the missing IRQF_COND_ONESHOT flag to devm_request_irq()
This is inconsistent vs request_irq() and causes the same issues
which where addressed with the introduction of this flag
- Cleanup IRQF_ONESHOT and IRQF_NO_THREAD usage
Quite some drivers have inconsistent interrupt request flags
related to interrupt threading namely IRQF_ONESHOT and
IRQF_NO_THREAD. This leads to warnings and/or malfunction when
forced interrupt threading is enabled.
- Remove stub primary (hard interrupt) handlers
A bunch of drivers implement a stub primary (hard interrupt)
handler which just returns IRQ_WAKE_THREAD. The same functionality
is provided by the core code when the primary handler argument of
request_thread_irq() is set to NULL"
* tag 'irq-cleanups-2026-02-09' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
media: pci: mg4b: Use IRQF_NO_THREAD
mfd: wm8350-core: Use IRQF_ONESHOT
thermal/qcom/lmh: Replace IRQF_ONESHOT with IRQF_NO_THREAD
rtc: amlogic-a4: Remove IRQF_ONESHOT
usb: typec: fusb302: Remove IRQF_ONESHOT
EDAC/altera: Remove IRQF_ONESHOT
char: tpm: cr50: Remove IRQF_ONESHOT
ARM: versatile: Remove IRQF_ONESHOT
scsi: efct: Use IRQF_ONESHOT and default primary handler
Bluetooth: btintel_pcie: Use IRQF_ONESHOT and default primary handler
bus: fsl-mc: Use default primary handler
mailbox: bcm-ferxrm-mailbox: Use default primary handler
iommu/amd: Use core's primary handler and set IRQF_ONESHOT
platform/x86: int0002: Remove IRQF_ONESHOT from request_irq()
genirq: Set IRQF_COND_ONESHOT in devm_request_irq().
This commit is contained in:
@@ -459,8 +459,8 @@ int __init ve_spc_init(void __iomem *baseaddr, u32 a15_clusid, int irq)
|
|||||||
|
|
||||||
readl_relaxed(info->baseaddr + PWC_STATUS);
|
readl_relaxed(info->baseaddr + PWC_STATUS);
|
||||||
|
|
||||||
ret = request_irq(irq, ve_spc_irq_handler, IRQF_TRIGGER_HIGH
|
ret = request_irq(irq, ve_spc_irq_handler, IRQF_TRIGGER_HIGH,
|
||||||
| IRQF_ONESHOT, "vexpress-spc", info);
|
"vexpress-spc", info);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pr_err(SPCLOG "IRQ %d request failed\n", irq);
|
pr_err(SPCLOG "IRQ %d request failed\n", irq);
|
||||||
kfree(info);
|
kfree(info);
|
||||||
|
|||||||
@@ -1431,11 +1431,6 @@ static void btintel_pcie_msix_rx_handle(struct btintel_pcie_data *data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static irqreturn_t btintel_pcie_msix_isr(int irq, void *data)
|
|
||||||
{
|
|
||||||
return IRQ_WAKE_THREAD;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool btintel_pcie_is_rxq_empty(struct btintel_pcie_data *data)
|
static inline bool btintel_pcie_is_rxq_empty(struct btintel_pcie_data *data)
|
||||||
{
|
{
|
||||||
return data->ia.cr_hia[BTINTEL_PCIE_RXQ_NUM] == data->ia.cr_tia[BTINTEL_PCIE_RXQ_NUM];
|
return data->ia.cr_hia[BTINTEL_PCIE_RXQ_NUM] == data->ia.cr_tia[BTINTEL_PCIE_RXQ_NUM];
|
||||||
@@ -1537,9 +1532,9 @@ static int btintel_pcie_setup_irq(struct btintel_pcie_data *data)
|
|||||||
|
|
||||||
err = devm_request_threaded_irq(&data->pdev->dev,
|
err = devm_request_threaded_irq(&data->pdev->dev,
|
||||||
msix_entry->vector,
|
msix_entry->vector,
|
||||||
btintel_pcie_msix_isr,
|
NULL,
|
||||||
btintel_pcie_irq_msix_handler,
|
btintel_pcie_irq_msix_handler,
|
||||||
IRQF_SHARED,
|
IRQF_ONESHOT | IRQF_SHARED,
|
||||||
KBUILD_MODNAME,
|
KBUILD_MODNAME,
|
||||||
msix_entry);
|
msix_entry);
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|||||||
@@ -380,17 +380,6 @@ int dprc_scan_container(struct fsl_mc_device *mc_bus_dev,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(dprc_scan_container);
|
EXPORT_SYMBOL_GPL(dprc_scan_container);
|
||||||
|
|
||||||
/**
|
|
||||||
* dprc_irq0_handler - Regular ISR for DPRC interrupt 0
|
|
||||||
*
|
|
||||||
* @irq_num: IRQ number of the interrupt being handled
|
|
||||||
* @arg: Pointer to device structure
|
|
||||||
*/
|
|
||||||
static irqreturn_t dprc_irq0_handler(int irq_num, void *arg)
|
|
||||||
{
|
|
||||||
return IRQ_WAKE_THREAD;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dprc_irq0_handler_thread - Handler thread function for DPRC interrupt 0
|
* dprc_irq0_handler_thread - Handler thread function for DPRC interrupt 0
|
||||||
*
|
*
|
||||||
@@ -527,7 +516,7 @@ static int register_dprc_irq_handler(struct fsl_mc_device *mc_dev)
|
|||||||
*/
|
*/
|
||||||
error = devm_request_threaded_irq(&mc_dev->dev,
|
error = devm_request_threaded_irq(&mc_dev->dev,
|
||||||
irq->virq,
|
irq->virq,
|
||||||
dprc_irq0_handler,
|
NULL,
|
||||||
dprc_irq0_handler_thread,
|
dprc_irq0_handler_thread,
|
||||||
IRQF_NO_SUSPEND | IRQF_ONESHOT,
|
IRQF_NO_SUSPEND | IRQF_ONESHOT,
|
||||||
dev_name(&mc_dev->dev),
|
dev_name(&mc_dev->dev),
|
||||||
|
|||||||
@@ -749,8 +749,7 @@ static int tpm_cr50_i2c_probe(struct i2c_client *client)
|
|||||||
|
|
||||||
if (client->irq > 0) {
|
if (client->irq > 0) {
|
||||||
rc = devm_request_irq(dev, client->irq, tpm_cr50_i2c_int_handler,
|
rc = devm_request_irq(dev, client->irq, tpm_cr50_i2c_int_handler,
|
||||||
IRQF_TRIGGER_FALLING | IRQF_ONESHOT |
|
IRQF_TRIGGER_FALLING | IRQF_NO_AUTOEN,
|
||||||
IRQF_NO_AUTOEN,
|
|
||||||
dev->driver->name, chip);
|
dev->driver->name, chip);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
dev_err(dev, "Failed to probe IRQ %d\n", client->irq);
|
dev_err(dev, "Failed to probe IRQ %d\n", client->irq);
|
||||||
|
|||||||
@@ -287,7 +287,7 @@ int cr50_spi_probe(struct spi_device *spi)
|
|||||||
if (spi->irq > 0) {
|
if (spi->irq > 0) {
|
||||||
ret = devm_request_irq(&spi->dev, spi->irq,
|
ret = devm_request_irq(&spi->dev, spi->irq,
|
||||||
cr50_spi_irq_handler,
|
cr50_spi_irq_handler,
|
||||||
IRQF_TRIGGER_RISING | IRQF_ONESHOT,
|
IRQF_TRIGGER_RISING,
|
||||||
"cr50_spi", cr50_phy);
|
"cr50_spi", cr50_phy);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
if (ret == -EPROBE_DEFER)
|
if (ret == -EPROBE_DEFER)
|
||||||
|
|||||||
@@ -1563,8 +1563,7 @@ static int altr_portb_setup(struct altr_edac_device_dev *device)
|
|||||||
goto err_release_group_1;
|
goto err_release_group_1;
|
||||||
}
|
}
|
||||||
rc = devm_request_irq(&altdev->ddev, altdev->sb_irq,
|
rc = devm_request_irq(&altdev->ddev, altdev->sb_irq,
|
||||||
prv->ecc_irq_handler,
|
prv->ecc_irq_handler, IRQF_TRIGGER_HIGH,
|
||||||
IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
|
|
||||||
ecc_name, altdev);
|
ecc_name, altdev);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
edac_printk(KERN_ERR, EDAC_DEVICE, "PortB SBERR IRQ error\n");
|
edac_printk(KERN_ERR, EDAC_DEVICE, "PortB SBERR IRQ error\n");
|
||||||
@@ -1587,8 +1586,7 @@ static int altr_portb_setup(struct altr_edac_device_dev *device)
|
|||||||
goto err_release_group_1;
|
goto err_release_group_1;
|
||||||
}
|
}
|
||||||
rc = devm_request_irq(&altdev->ddev, altdev->db_irq,
|
rc = devm_request_irq(&altdev->ddev, altdev->db_irq,
|
||||||
prv->ecc_irq_handler,
|
prv->ecc_irq_handler, IRQF_TRIGGER_HIGH,
|
||||||
IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
|
|
||||||
ecc_name, altdev);
|
ecc_name, altdev);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
edac_printk(KERN_ERR, EDAC_DEVICE, "PortB DBERR IRQ error\n");
|
edac_printk(KERN_ERR, EDAC_DEVICE, "PortB DBERR IRQ error\n");
|
||||||
@@ -1970,8 +1968,7 @@ static int altr_edac_a10_device_add(struct altr_arria10_edac *edac,
|
|||||||
goto err_release_group1;
|
goto err_release_group1;
|
||||||
}
|
}
|
||||||
rc = devm_request_irq(edac->dev, altdev->sb_irq, prv->ecc_irq_handler,
|
rc = devm_request_irq(edac->dev, altdev->sb_irq, prv->ecc_irq_handler,
|
||||||
IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
|
IRQF_TRIGGER_HIGH, ecc_name, altdev);
|
||||||
ecc_name, altdev);
|
|
||||||
if (rc) {
|
if (rc) {
|
||||||
edac_printk(KERN_ERR, EDAC_DEVICE, "No SBERR IRQ resource\n");
|
edac_printk(KERN_ERR, EDAC_DEVICE, "No SBERR IRQ resource\n");
|
||||||
goto err_release_group1;
|
goto err_release_group1;
|
||||||
@@ -1993,7 +1990,7 @@ static int altr_edac_a10_device_add(struct altr_arria10_edac *edac,
|
|||||||
goto err_release_group1;
|
goto err_release_group1;
|
||||||
}
|
}
|
||||||
rc = devm_request_irq(edac->dev, altdev->db_irq, prv->ecc_irq_handler,
|
rc = devm_request_irq(edac->dev, altdev->db_irq, prv->ecc_irq_handler,
|
||||||
IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
|
IRQF_TRIGGER_HIGH,
|
||||||
ecc_name, altdev);
|
ecc_name, altdev);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
edac_printk(KERN_ERR, EDAC_DEVICE, "No DBERR IRQ resource\n");
|
edac_printk(KERN_ERR, EDAC_DEVICE, "No DBERR IRQ resource\n");
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ irqreturn_t amd_iommu_int_thread(int irq, void *data);
|
|||||||
irqreturn_t amd_iommu_int_thread_evtlog(int irq, void *data);
|
irqreturn_t amd_iommu_int_thread_evtlog(int irq, void *data);
|
||||||
irqreturn_t amd_iommu_int_thread_pprlog(int irq, void *data);
|
irqreturn_t amd_iommu_int_thread_pprlog(int irq, void *data);
|
||||||
irqreturn_t amd_iommu_int_thread_galog(int irq, void *data);
|
irqreturn_t amd_iommu_int_thread_galog(int irq, void *data);
|
||||||
irqreturn_t amd_iommu_int_handler(int irq, void *data);
|
|
||||||
void amd_iommu_restart_log(struct amd_iommu *iommu, const char *evt_type,
|
void amd_iommu_restart_log(struct amd_iommu *iommu, const char *evt_type,
|
||||||
u8 cntrl_intr, u8 cntrl_log,
|
u8 cntrl_intr, u8 cntrl_log,
|
||||||
u32 status_run_mask, u32 status_overflow_mask);
|
u32 status_run_mask, u32 status_overflow_mask);
|
||||||
|
|||||||
@@ -2356,12 +2356,8 @@ static int iommu_setup_msi(struct amd_iommu *iommu)
|
|||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
r = request_threaded_irq(iommu->dev->irq,
|
r = request_threaded_irq(iommu->dev->irq, NULL, amd_iommu_int_thread,
|
||||||
amd_iommu_int_handler,
|
IRQF_ONESHOT, "AMD-Vi", iommu);
|
||||||
amd_iommu_int_thread,
|
|
||||||
0, "AMD-Vi",
|
|
||||||
iommu);
|
|
||||||
|
|
||||||
if (r) {
|
if (r) {
|
||||||
pci_disable_msi(iommu->dev);
|
pci_disable_msi(iommu->dev);
|
||||||
return r;
|
return r;
|
||||||
@@ -2535,8 +2531,8 @@ static int __iommu_setup_intcapxt(struct amd_iommu *iommu, const char *devname,
|
|||||||
return irq;
|
return irq;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = request_threaded_irq(irq, amd_iommu_int_handler,
|
ret = request_threaded_irq(irq, NULL, thread_fn, IRQF_ONESHOT, devname,
|
||||||
thread_fn, 0, devname, iommu);
|
iommu);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
irq_domain_free_irqs(irq, 1);
|
irq_domain_free_irqs(irq, 1);
|
||||||
irq_domain_remove(domain);
|
irq_domain_remove(domain);
|
||||||
|
|||||||
@@ -1151,11 +1151,6 @@ irqreturn_t amd_iommu_int_thread(int irq, void *data)
|
|||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
irqreturn_t amd_iommu_int_handler(int irq, void *data)
|
|
||||||
{
|
|
||||||
return IRQ_WAKE_THREAD;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
*
|
*
|
||||||
* IOMMU command queuing functions
|
* IOMMU command queuing functions
|
||||||
|
|||||||
@@ -1173,14 +1173,6 @@ static int flexrm_debugfs_stats_show(struct seq_file *file, void *offset)
|
|||||||
|
|
||||||
/* ====== FlexRM interrupt handler ===== */
|
/* ====== FlexRM interrupt handler ===== */
|
||||||
|
|
||||||
static irqreturn_t flexrm_irq_event(int irq, void *dev_id)
|
|
||||||
{
|
|
||||||
/* We only have MSI for completions so just wakeup IRQ thread */
|
|
||||||
/* Ring related errors will be informed via completion descriptors */
|
|
||||||
|
|
||||||
return IRQ_WAKE_THREAD;
|
|
||||||
}
|
|
||||||
|
|
||||||
static irqreturn_t flexrm_irq_thread(int irq, void *dev_id)
|
static irqreturn_t flexrm_irq_thread(int irq, void *dev_id)
|
||||||
{
|
{
|
||||||
flexrm_process_completions(dev_id);
|
flexrm_process_completions(dev_id);
|
||||||
@@ -1271,10 +1263,8 @@ static int flexrm_startup(struct mbox_chan *chan)
|
|||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
goto fail_free_cmpl_memory;
|
goto fail_free_cmpl_memory;
|
||||||
}
|
}
|
||||||
ret = request_threaded_irq(ring->irq,
|
ret = request_threaded_irq(ring->irq, NULL, flexrm_irq_thread,
|
||||||
flexrm_irq_event,
|
IRQF_ONESHOT, dev_name(ring->mbox->dev), ring);
|
||||||
flexrm_irq_thread,
|
|
||||||
0, dev_name(ring->mbox->dev), ring);
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(ring->mbox->dev,
|
dev_err(ring->mbox->dev,
|
||||||
"failed to request ring%d IRQ\n", ring->num);
|
"failed to request ring%d IRQ\n", ring->num);
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ static int probe_trigger(struct iio_dev *indio_dev, int irq)
|
|||||||
if (!st->trig)
|
if (!st->trig)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
ret = request_irq(irq, &iio_trigger_generic_data_rdy_poll, 0,
|
ret = request_irq(irq, &iio_trigger_generic_data_rdy_poll, IRQF_NO_THREAD,
|
||||||
"mgb4-trigger", st->trig);
|
"mgb4-trigger", st->trig);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto error_free_trig;
|
goto error_free_trig;
|
||||||
|
|||||||
@@ -206,8 +206,8 @@ static int int0002_probe(struct platform_device *pdev)
|
|||||||
* FIXME: augment this if we managed to pull handling of shared
|
* FIXME: augment this if we managed to pull handling of shared
|
||||||
* IRQs into gpiolib.
|
* IRQs into gpiolib.
|
||||||
*/
|
*/
|
||||||
ret = devm_request_irq(dev, irq, int0002_irq,
|
ret = devm_request_irq(dev, irq, int0002_irq, IRQF_SHARED, "INT0002",
|
||||||
IRQF_ONESHOT | IRQF_SHARED, "INT0002", chip);
|
chip);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "Error requesting IRQ %d: %d\n", irq, ret);
|
dev_err(dev, "Error requesting IRQ %d: %d\n", irq, ret);
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -369,7 +369,7 @@ static int aml_rtc_probe(struct platform_device *pdev)
|
|||||||
return PTR_ERR(rtc->rtc_dev);
|
return PTR_ERR(rtc->rtc_dev);
|
||||||
|
|
||||||
ret = devm_request_irq(dev, rtc->irq, aml_rtc_handler,
|
ret = devm_request_irq(dev, rtc->irq, aml_rtc_handler,
|
||||||
IRQF_ONESHOT, "aml-rtc alarm", rtc);
|
0, "aml-rtc alarm", rtc);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err_probe(dev, ret, "IRQ%d request failed, ret = %d\n",
|
dev_err_probe(dev, ret, "IRQ%d request failed, ret = %d\n",
|
||||||
rtc->irq, ret);
|
rtc->irq, ret);
|
||||||
|
|||||||
@@ -415,12 +415,6 @@ efct_intr_thread(int irq, void *handle)
|
|||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static irqreturn_t
|
|
||||||
efct_intr_msix(int irq, void *handle)
|
|
||||||
{
|
|
||||||
return IRQ_WAKE_THREAD;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
efct_setup_msix(struct efct *efct, u32 num_intrs)
|
efct_setup_msix(struct efct *efct, u32 num_intrs)
|
||||||
{
|
{
|
||||||
@@ -450,7 +444,7 @@ efct_setup_msix(struct efct *efct, u32 num_intrs)
|
|||||||
intr_ctx->index = i;
|
intr_ctx->index = i;
|
||||||
|
|
||||||
rc = request_threaded_irq(pci_irq_vector(efct->pci, i),
|
rc = request_threaded_irq(pci_irq_vector(efct->pci, i),
|
||||||
efct_intr_msix, efct_intr_thread, 0,
|
NULL, efct_intr_thread, IRQF_ONESHOT,
|
||||||
EFCT_DRIVER_NAME, intr_ctx);
|
EFCT_DRIVER_NAME, intr_ctx);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
dev_err(&efct->pci->dev,
|
dev_err(&efct->pci->dev,
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ static int lmh_probe(struct platform_device *pdev)
|
|||||||
/* Disable the irq and let cpufreq enable it when ready to handle the interrupt */
|
/* Disable the irq and let cpufreq enable it when ready to handle the interrupt */
|
||||||
irq_set_status_flags(lmh_data->irq, IRQ_NOAUTOEN);
|
irq_set_status_flags(lmh_data->irq, IRQ_NOAUTOEN);
|
||||||
ret = devm_request_irq(dev, lmh_data->irq, lmh_handle_irq,
|
ret = devm_request_irq(dev, lmh_data->irq, lmh_handle_irq,
|
||||||
IRQF_ONESHOT | IRQF_NO_SUSPEND,
|
IRQF_NO_THREAD | IRQF_NO_SUSPEND,
|
||||||
"lmh-irq", lmh_data);
|
"lmh-irq", lmh_data);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "Error %d registering irq %x\n", ret, lmh_data->irq);
|
dev_err(dev, "Error %d registering irq %x\n", ret, lmh_data->irq);
|
||||||
|
|||||||
@@ -1756,8 +1756,7 @@ static int fusb302_probe(struct i2c_client *client)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ret = request_irq(chip->gpio_int_n_irq, fusb302_irq_intn,
|
ret = request_irq(chip->gpio_int_n_irq, fusb302_irq_intn,
|
||||||
IRQF_ONESHOT | IRQF_TRIGGER_LOW,
|
IRQF_TRIGGER_LOW, "fsc_interrupt_int_n", chip);
|
||||||
"fsc_interrupt_int_n", chip);
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(dev, "cannot request IRQ for GPIO Int_N, ret=%d", ret);
|
dev_err(dev, "cannot request IRQ for GPIO Int_N, ret=%d", ret);
|
||||||
goto tcpm_unregister_port;
|
goto tcpm_unregister_port;
|
||||||
|
|||||||
@@ -228,7 +228,7 @@ static inline int __must_check
|
|||||||
devm_request_irq(struct device *dev, unsigned int irq, irq_handler_t handler,
|
devm_request_irq(struct device *dev, unsigned int irq, irq_handler_t handler,
|
||||||
unsigned long irqflags, const char *devname, void *dev_id)
|
unsigned long irqflags, const char *devname, void *dev_id)
|
||||||
{
|
{
|
||||||
return devm_request_threaded_irq(dev, irq, handler, NULL, irqflags,
|
return devm_request_threaded_irq(dev, irq, handler, NULL, irqflags | IRQF_COND_ONESHOT,
|
||||||
devname, dev_id);
|
devname, dev_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -667,7 +667,7 @@ static inline int wm8350_register_irq(struct wm8350 *wm8350, int irq,
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
return request_threaded_irq(irq + wm8350->irq_base, NULL,
|
return request_threaded_irq(irq + wm8350->irq_base, NULL,
|
||||||
handler, flags, name, data);
|
handler, flags | IRQF_ONESHOT, name, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void wm8350_free_irq(struct wm8350 *wm8350, int irq, void *data)
|
static inline void wm8350_free_irq(struct wm8350 *wm8350, int irq, void *data)
|
||||||
|
|||||||
Reference in New Issue
Block a user