Loading drivers/irqchip/qcom/pdc.c +18 −1 Original line number Diff line number Diff line /* Copyright (c) 2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading @@ -16,6 +16,7 @@ #include <linux/init.h> #include <linux/irq.h> #include <linux/irqchip.h> #include <linux/interrupt.h> #include <linux/irqdomain.h> #include <linux/io.h> #include <linux/kernel.h> Loading Loading @@ -95,6 +96,20 @@ static inline int pdc_enable_intr(struct irq_data *d, bool on) return 0; } static int qcom_pdc_gic_get_irqchip_state(struct irq_data *d, enum irqchip_irq_state which, bool *state) { return d->parent_data->chip->irq_get_irqchip_state(d, which, state); } static int qcom_pdc_gic_set_irqchip_state(struct irq_data *d, enum irqchip_irq_state which, bool value) { return d->parent_data->chip->irq_set_irqchip_state(d, which, value); } static void qcom_pdc_gic_mask(struct irq_data *d) { pdc_enable_intr(d, false); Loading Loading @@ -220,6 +235,8 @@ static struct irq_chip qcom_pdc_gic_chip = { #ifdef CONFIG_SMP .irq_set_affinity = irq_chip_set_affinity_parent, #endif .irq_get_irqchip_state = qcom_pdc_gic_get_irqchip_state, .irq_set_irqchip_state = qcom_pdc_gic_set_irqchip_state, }; static int qcom_pdc_translate(struct irq_domain *d, Loading drivers/pinctrl/qcom/pinctrl-msm.c +33 −0 Original line number Diff line number Diff line Loading @@ -932,6 +932,38 @@ static void msm_dirconn_irq_mask(struct irq_data *d) parent_data->chip->irq_mask(parent_data); } static void msm_dirconn_irq_enable(struct irq_data *d) { struct irq_desc *desc = irq_data_to_desc(d); struct irq_data *parent_data = irq_get_irq_data(desc->parent_irq); irq_hw_number_t dir_conn_irq = 0; if (!parent_data) return; if (is_gpio_dual_edge(d, &dir_conn_irq)) { struct irq_data *dir_conn_data = irq_get_irq_data(irq_find_mapping(parent_data->domain, dir_conn_irq)); if (dir_conn_data && dir_conn_data->chip->irq_set_irqchip_state) dir_conn_data->chip->irq_set_irqchip_state( dir_conn_data, IRQCHIP_STATE_PENDING, 0); if (dir_conn_data && dir_conn_data->chip->irq_unmask) dir_conn_data->chip->irq_unmask(dir_conn_data); } if (parent_data->chip->irq_set_irqchip_state) parent_data->chip->irq_set_irqchip_state(parent_data, IRQCHIP_STATE_PENDING, 0); if (parent_data->chip->irq_unmask) parent_data->chip->irq_unmask(parent_data); } static void msm_dirconn_irq_unmask(struct irq_data *d) { struct irq_desc *desc = irq_data_to_desc(d); Loading Loading @@ -1171,6 +1203,7 @@ static int msm_dirconn_irq_set_type(struct irq_data *d, unsigned int type) static struct irq_chip msm_dirconn_irq_chip = { .name = "msmgpio-dc", .irq_mask = msm_dirconn_irq_mask, .irq_enable = msm_dirconn_irq_enable, .irq_unmask = msm_dirconn_irq_unmask, .irq_eoi = msm_dirconn_irq_eoi, .irq_ack = msm_dirconn_irq_ack, Loading Loading
drivers/irqchip/qcom/pdc.c +18 −1 Original line number Diff line number Diff line /* Copyright (c) 2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading @@ -16,6 +16,7 @@ #include <linux/init.h> #include <linux/irq.h> #include <linux/irqchip.h> #include <linux/interrupt.h> #include <linux/irqdomain.h> #include <linux/io.h> #include <linux/kernel.h> Loading Loading @@ -95,6 +96,20 @@ static inline int pdc_enable_intr(struct irq_data *d, bool on) return 0; } static int qcom_pdc_gic_get_irqchip_state(struct irq_data *d, enum irqchip_irq_state which, bool *state) { return d->parent_data->chip->irq_get_irqchip_state(d, which, state); } static int qcom_pdc_gic_set_irqchip_state(struct irq_data *d, enum irqchip_irq_state which, bool value) { return d->parent_data->chip->irq_set_irqchip_state(d, which, value); } static void qcom_pdc_gic_mask(struct irq_data *d) { pdc_enable_intr(d, false); Loading Loading @@ -220,6 +235,8 @@ static struct irq_chip qcom_pdc_gic_chip = { #ifdef CONFIG_SMP .irq_set_affinity = irq_chip_set_affinity_parent, #endif .irq_get_irqchip_state = qcom_pdc_gic_get_irqchip_state, .irq_set_irqchip_state = qcom_pdc_gic_set_irqchip_state, }; static int qcom_pdc_translate(struct irq_domain *d, Loading
drivers/pinctrl/qcom/pinctrl-msm.c +33 −0 Original line number Diff line number Diff line Loading @@ -932,6 +932,38 @@ static void msm_dirconn_irq_mask(struct irq_data *d) parent_data->chip->irq_mask(parent_data); } static void msm_dirconn_irq_enable(struct irq_data *d) { struct irq_desc *desc = irq_data_to_desc(d); struct irq_data *parent_data = irq_get_irq_data(desc->parent_irq); irq_hw_number_t dir_conn_irq = 0; if (!parent_data) return; if (is_gpio_dual_edge(d, &dir_conn_irq)) { struct irq_data *dir_conn_data = irq_get_irq_data(irq_find_mapping(parent_data->domain, dir_conn_irq)); if (dir_conn_data && dir_conn_data->chip->irq_set_irqchip_state) dir_conn_data->chip->irq_set_irqchip_state( dir_conn_data, IRQCHIP_STATE_PENDING, 0); if (dir_conn_data && dir_conn_data->chip->irq_unmask) dir_conn_data->chip->irq_unmask(dir_conn_data); } if (parent_data->chip->irq_set_irqchip_state) parent_data->chip->irq_set_irqchip_state(parent_data, IRQCHIP_STATE_PENDING, 0); if (parent_data->chip->irq_unmask) parent_data->chip->irq_unmask(parent_data); } static void msm_dirconn_irq_unmask(struct irq_data *d) { struct irq_desc *desc = irq_data_to_desc(d); Loading Loading @@ -1171,6 +1203,7 @@ static int msm_dirconn_irq_set_type(struct irq_data *d, unsigned int type) static struct irq_chip msm_dirconn_irq_chip = { .name = "msmgpio-dc", .irq_mask = msm_dirconn_irq_mask, .irq_enable = msm_dirconn_irq_enable, .irq_unmask = msm_dirconn_irq_unmask, .irq_eoi = msm_dirconn_irq_eoi, .irq_ack = msm_dirconn_irq_ack, Loading