mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 20:54:10 +08:00
soc: qcom: smsm: Implement support for get_irqchip_state
At the moment there is no way for drivers to get the current state of the interrupt signal reported by a remote processor. The irqchip API has generic functionality for this, using irq_get_irqchip_state(). Implement support for getting the IRQCHIP_STATE_LINE_LEVEL by reading the remote state and checking the bit for the specified IRQ. Signed-off-by: Stephan Gerhold <stephan@gerhold.net> Link: https://lore.kernel.org/r/20210712135703.324748-1-stephan@gerhold.net Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
This commit is contained in:
parent
ad68c620b7
commit
c73a6852b4
@ -299,11 +299,28 @@ static int smsm_set_irq_type(struct irq_data *irqd, unsigned int type)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int smsm_get_irqchip_state(struct irq_data *irqd,
|
||||
enum irqchip_irq_state which, bool *state)
|
||||
{
|
||||
struct smsm_entry *entry = irq_data_get_irq_chip_data(irqd);
|
||||
irq_hw_number_t irq = irqd_to_hwirq(irqd);
|
||||
u32 val;
|
||||
|
||||
if (which != IRQCHIP_STATE_LINE_LEVEL)
|
||||
return -EINVAL;
|
||||
|
||||
val = readl(entry->remote_state);
|
||||
*state = !!(val & BIT(irq));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct irq_chip smsm_irq_chip = {
|
||||
.name = "smsm",
|
||||
.irq_mask = smsm_mask_irq,
|
||||
.irq_unmask = smsm_unmask_irq,
|
||||
.irq_set_type = smsm_set_irq_type,
|
||||
.irq_get_irqchip_state = smsm_get_irqchip_state,
|
||||
};
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user