pinctrl: qcom: Make the target processor value configurable
Currently the value used to specify that interrupts from the gpio should be routed to the application processor is hardcoded for all Qualcomm SoCs. But the new APQ8084 SoC uses a different value. To resolve this, we make this value configurable for each SoC. For all existing SoCs we continue to use the current value, and only for APQ8084 we use the new value. Suggested-by: Bjorn Andersson <bjorn.andersson@sonymobile.com> Acked-by: Bjorn Andersson <bjorn.andersson@sonymobile.com> Signed-off-by: Georgi Djakov <gdjakov@mm-sol.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
Родитель
a9d490c5a8
Коммит
f712c554a7
|
@ -258,6 +258,7 @@ static const unsigned int sdc3_data_pins[] = { 95 };
|
|||
.intr_status_bit = 0, \
|
||||
.intr_ack_high = 1, \
|
||||
.intr_target_bit = 0, \
|
||||
.intr_target_kpss_val = 4, \
|
||||
.intr_raw_status_bit = 3, \
|
||||
.intr_polarity_bit = 1, \
|
||||
.intr_detection_bit = 2, \
|
||||
|
@ -283,6 +284,7 @@ static const unsigned int sdc3_data_pins[] = { 95 };
|
|||
.intr_enable_bit = -1, \
|
||||
.intr_status_bit = -1, \
|
||||
.intr_target_bit = -1, \
|
||||
.intr_target_kpss_val = -1, \
|
||||
.intr_raw_status_bit = -1, \
|
||||
.intr_polarity_bit = -1, \
|
||||
.intr_detection_bit = -1, \
|
||||
|
|
|
@ -371,6 +371,7 @@ static const unsigned int sdc2_data_pins[] = { 152 };
|
|||
.intr_status_bit = 0, \
|
||||
.intr_ack_high = 0, \
|
||||
.intr_target_bit = 5, \
|
||||
.intr_target_kpss_val = 3, \
|
||||
.intr_raw_status_bit = 4, \
|
||||
.intr_polarity_bit = 1, \
|
||||
.intr_detection_bit = 2, \
|
||||
|
@ -396,6 +397,7 @@ static const unsigned int sdc2_data_pins[] = { 152 };
|
|||
.intr_enable_bit = -1, \
|
||||
.intr_status_bit = -1, \
|
||||
.intr_target_bit = -1, \
|
||||
.intr_target_kpss_val = -1, \
|
||||
.intr_raw_status_bit = -1, \
|
||||
.intr_polarity_bit = -1, \
|
||||
.intr_detection_bit = -1, \
|
||||
|
|
|
@ -211,6 +211,7 @@ static const unsigned int sdc3_data_pins[] = { 71 };
|
|||
.intr_status_bit = 0, \
|
||||
.intr_ack_high = 1, \
|
||||
.intr_target_bit = 0, \
|
||||
.intr_target_kpss_val = 4, \
|
||||
.intr_raw_status_bit = 3, \
|
||||
.intr_polarity_bit = 1, \
|
||||
.intr_detection_bit = 2, \
|
||||
|
@ -236,6 +237,7 @@ static const unsigned int sdc3_data_pins[] = { 71 };
|
|||
.intr_enable_bit = -1, \
|
||||
.intr_status_bit = -1, \
|
||||
.intr_target_bit = -1, \
|
||||
.intr_target_kpss_val = -1, \
|
||||
.intr_raw_status_bit = -1, \
|
||||
.intr_polarity_bit = -1, \
|
||||
.intr_detection_bit = -1, \
|
||||
|
|
|
@ -653,8 +653,6 @@ static void msm_gpio_irq_ack(struct irq_data *d)
|
|||
spin_unlock_irqrestore(&pctrl->lock, flags);
|
||||
}
|
||||
|
||||
#define INTR_TARGET_PROC_APPS 4
|
||||
|
||||
static int msm_gpio_irq_set_type(struct irq_data *d, unsigned int type)
|
||||
{
|
||||
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
|
||||
|
@ -678,7 +676,7 @@ static int msm_gpio_irq_set_type(struct irq_data *d, unsigned int type)
|
|||
/* Route interrupts to application cpu */
|
||||
val = readl(pctrl->regs + g->intr_target_reg);
|
||||
val &= ~(7 << g->intr_target_bit);
|
||||
val |= INTR_TARGET_PROC_APPS << g->intr_target_bit;
|
||||
val |= g->intr_target_kpss_val << g->intr_target_bit;
|
||||
writel(val, pctrl->regs + g->intr_target_reg);
|
||||
|
||||
/* Update configuration for gpio.
|
||||
|
|
|
@ -53,6 +53,8 @@ struct msm_function {
|
|||
* @intr_status_bit: Offset in @intr_status_reg for reading and acking the interrupt
|
||||
* status.
|
||||
* @intr_target_bit: Offset in @intr_target_reg for configuring the interrupt routing.
|
||||
* @intr_target_kpss_val: Value in @intr_target_bit for specifying that the interrupt from
|
||||
* this gpio should get routed to the KPSS processor.
|
||||
* @intr_raw_status_bit: Offset in @intr_cfg_reg for the raw status bit.
|
||||
* @intr_polarity_bit: Offset in @intr_cfg_reg for specifying polarity of the interrupt.
|
||||
* @intr_detection_bit: Offset in @intr_cfg_reg for specifying interrupt type.
|
||||
|
@ -88,6 +90,7 @@ struct msm_pingroup {
|
|||
unsigned intr_ack_high:1;
|
||||
|
||||
unsigned intr_target_bit:5;
|
||||
unsigned intr_target_kpss_val:5;
|
||||
unsigned intr_raw_status_bit:5;
|
||||
unsigned intr_polarity_bit:5;
|
||||
unsigned intr_detection_bit:5;
|
||||
|
|
|
@ -384,6 +384,7 @@ static const unsigned int sdc3_data_pins[] = { 157 };
|
|||
.intr_status_bit = 0, \
|
||||
.intr_ack_high = 1, \
|
||||
.intr_target_bit = 0, \
|
||||
.intr_target_kpss_val = 4, \
|
||||
.intr_raw_status_bit = 3, \
|
||||
.intr_polarity_bit = 1, \
|
||||
.intr_detection_bit = 2, \
|
||||
|
@ -409,6 +410,7 @@ static const unsigned int sdc3_data_pins[] = { 157 };
|
|||
.intr_enable_bit = -1, \
|
||||
.intr_status_bit = -1, \
|
||||
.intr_target_bit = -1, \
|
||||
.intr_target_kpss_val = -1, \
|
||||
.intr_raw_status_bit = -1, \
|
||||
.intr_polarity_bit = -1, \
|
||||
.intr_detection_bit = -1, \
|
||||
|
|
|
@ -366,6 +366,7 @@ static const unsigned int sdc2_data_pins[] = { 151 };
|
|||
.intr_enable_bit = 0, \
|
||||
.intr_status_bit = 0, \
|
||||
.intr_target_bit = 5, \
|
||||
.intr_target_kpss_val = 4, \
|
||||
.intr_raw_status_bit = 4, \
|
||||
.intr_polarity_bit = 1, \
|
||||
.intr_detection_bit = 2, \
|
||||
|
@ -391,6 +392,7 @@ static const unsigned int sdc2_data_pins[] = { 151 };
|
|||
.intr_enable_bit = -1, \
|
||||
.intr_status_bit = -1, \
|
||||
.intr_target_bit = -1, \
|
||||
.intr_target_kpss_val = -1, \
|
||||
.intr_raw_status_bit = -1, \
|
||||
.intr_polarity_bit = -1, \
|
||||
.intr_detection_bit = -1, \
|
||||
|
|
Загрузка…
Ссылка в новой задаче