Merge tag 'pinctrl-v6.1-4' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl
Pull pin control fixes from Linus Walleij: "Aere is a hopefully final round of pin control fixes. Nothing special, driver fixes and we caught a potential NULL pointer exception. - Fix a potential NULL dereference in the core! - Fix all pin mux routes in the Rockchop PX30 driver - Fix the UFS pins in the Qualcomm SC8280XP driver - Fix bias disabling in the Mediatek driver - Fix debounce time settings in the Mediatek driver" * tag 'pinctrl-v6.1-4' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl: pinctrl: mediatek: Export debounce time tables pinctrl: mediatek: Fix EINT pins input debounce time configuration pinctrl: devicetree: fix null pointer dereferencing in pinctrl_dt_to_map pinctrl: mediatek: common-v2: Fix bias-disable for PULL_PU_PD_RSEL_TYPE pinctrl: qcom: sc8280xp: Rectify UFS reset pins pinctrl: rockchip: list all pins in a possible mux route for PX30
This commit is contained in:
@@ -220,6 +220,8 @@ int pinctrl_dt_to_map(struct pinctrl *p, struct pinctrl_dev *pctldev)
|
||||
for (state = 0; ; state++) {
|
||||
/* Retrieve the pinctrl-* property */
|
||||
propname = kasprintf(GFP_KERNEL, "pinctrl-%d", state);
|
||||
if (!propname)
|
||||
return -ENOMEM;
|
||||
prop = of_find_property(np, propname, &size);
|
||||
kfree(propname);
|
||||
if (!prop) {
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#define MTK_EINT_EDGE_SENSITIVE 0
|
||||
#define MTK_EINT_LEVEL_SENSITIVE 1
|
||||
#define MTK_EINT_DBNC_SET_DBNC_BITS 4
|
||||
#define MTK_EINT_DBNC_MAX 16
|
||||
#define MTK_EINT_DBNC_RST_BIT (0x1 << 1)
|
||||
#define MTK_EINT_DBNC_SET_EN (0x1 << 0)
|
||||
|
||||
@@ -48,6 +49,21 @@ static const struct mtk_eint_regs mtk_generic_eint_regs = {
|
||||
.dbnc_clr = 0x700,
|
||||
};
|
||||
|
||||
const unsigned int debounce_time_mt2701[] = {
|
||||
500, 1000, 16000, 32000, 64000, 128000, 256000, 0
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(debounce_time_mt2701);
|
||||
|
||||
const unsigned int debounce_time_mt6765[] = {
|
||||
125, 250, 500, 1000, 16000, 32000, 64000, 128000, 256000, 512000, 0
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(debounce_time_mt6765);
|
||||
|
||||
const unsigned int debounce_time_mt6795[] = {
|
||||
500, 1000, 16000, 32000, 64000, 128000, 256000, 512000, 0
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(debounce_time_mt6795);
|
||||
|
||||
static void __iomem *mtk_eint_get_offset(struct mtk_eint *eint,
|
||||
unsigned int eint_num,
|
||||
unsigned int offset)
|
||||
@@ -404,10 +420,11 @@ int mtk_eint_set_debounce(struct mtk_eint *eint, unsigned long eint_num,
|
||||
int virq, eint_offset;
|
||||
unsigned int set_offset, bit, clr_bit, clr_offset, rst, i, unmask,
|
||||
dbnc;
|
||||
static const unsigned int debounce_time[] = {500, 1000, 16000, 32000,
|
||||
64000, 128000, 256000};
|
||||
struct irq_data *d;
|
||||
|
||||
if (!eint->hw->db_time)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
virq = irq_find_mapping(eint->domain, eint_num);
|
||||
eint_offset = (eint_num % 4) * 8;
|
||||
d = irq_get_irq_data(virq);
|
||||
@@ -418,9 +435,9 @@ int mtk_eint_set_debounce(struct mtk_eint *eint, unsigned long eint_num,
|
||||
if (!mtk_eint_can_en_debounce(eint, eint_num))
|
||||
return -EINVAL;
|
||||
|
||||
dbnc = ARRAY_SIZE(debounce_time);
|
||||
for (i = 0; i < ARRAY_SIZE(debounce_time); i++) {
|
||||
if (debounce <= debounce_time[i]) {
|
||||
dbnc = eint->num_db_time;
|
||||
for (i = 0; i < eint->num_db_time; i++) {
|
||||
if (debounce <= eint->hw->db_time[i]) {
|
||||
dbnc = i;
|
||||
break;
|
||||
}
|
||||
@@ -494,6 +511,13 @@ int mtk_eint_do_init(struct mtk_eint *eint)
|
||||
if (!eint->domain)
|
||||
return -ENOMEM;
|
||||
|
||||
if (eint->hw->db_time) {
|
||||
for (i = 0; i < MTK_EINT_DBNC_MAX; i++)
|
||||
if (eint->hw->db_time[i] == 0)
|
||||
break;
|
||||
eint->num_db_time = i;
|
||||
}
|
||||
|
||||
mtk_eint_hw_init(eint);
|
||||
for (i = 0; i < eint->hw->ap_num; i++) {
|
||||
int virq = irq_create_mapping(eint->domain, i);
|
||||
|
||||
@@ -37,8 +37,13 @@ struct mtk_eint_hw {
|
||||
u8 ports;
|
||||
unsigned int ap_num;
|
||||
unsigned int db_cnt;
|
||||
const unsigned int *db_time;
|
||||
};
|
||||
|
||||
extern const unsigned int debounce_time_mt2701[];
|
||||
extern const unsigned int debounce_time_mt6765[];
|
||||
extern const unsigned int debounce_time_mt6795[];
|
||||
|
||||
struct mtk_eint;
|
||||
|
||||
struct mtk_eint_xt {
|
||||
@@ -62,6 +67,7 @@ struct mtk_eint {
|
||||
/* Used to fit into various EINT device */
|
||||
const struct mtk_eint_hw *hw;
|
||||
const struct mtk_eint_regs *regs;
|
||||
u16 num_db_time;
|
||||
|
||||
/* Used to fit into various pinctrl device */
|
||||
void *pctl;
|
||||
|
||||
@@ -518,6 +518,7 @@ static const struct mtk_pinctrl_devdata mt2701_pinctrl_data = {
|
||||
.ports = 6,
|
||||
.ap_num = 169,
|
||||
.db_cnt = 16,
|
||||
.db_time = debounce_time_mt2701,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -567,6 +567,7 @@ static const struct mtk_pinctrl_devdata mt2712_pinctrl_data = {
|
||||
.ports = 8,
|
||||
.ap_num = 229,
|
||||
.db_cnt = 40,
|
||||
.db_time = debounce_time_mt2701,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -1062,6 +1062,7 @@ static const struct mtk_eint_hw mt6765_eint_hw = {
|
||||
.ports = 6,
|
||||
.ap_num = 160,
|
||||
.db_cnt = 13,
|
||||
.db_time = debounce_time_mt6765,
|
||||
};
|
||||
|
||||
static const struct mtk_pin_soc mt6765_data = {
|
||||
|
||||
@@ -737,6 +737,7 @@ static const struct mtk_eint_hw mt6779_eint_hw = {
|
||||
.ports = 6,
|
||||
.ap_num = 195,
|
||||
.db_cnt = 13,
|
||||
.db_time = debounce_time_mt2701,
|
||||
};
|
||||
|
||||
static const struct mtk_pin_soc mt6779_data = {
|
||||
|
||||
@@ -475,6 +475,7 @@ static const struct mtk_eint_hw mt6795_eint_hw = {
|
||||
.ports = 7,
|
||||
.ap_num = 224,
|
||||
.db_cnt = 32,
|
||||
.db_time = debounce_time_mt6795,
|
||||
};
|
||||
|
||||
static const unsigned int mt6795_pull_type[] = {
|
||||
|
||||
@@ -846,6 +846,7 @@ static const struct mtk_eint_hw mt7622_eint_hw = {
|
||||
.ports = 7,
|
||||
.ap_num = ARRAY_SIZE(mt7622_pins),
|
||||
.db_cnt = 20,
|
||||
.db_time = debounce_time_mt6765,
|
||||
};
|
||||
|
||||
static const struct mtk_pin_soc mt7622_data = {
|
||||
|
||||
@@ -1369,6 +1369,7 @@ static const struct mtk_eint_hw mt7623_eint_hw = {
|
||||
.ports = 6,
|
||||
.ap_num = 169,
|
||||
.db_cnt = 20,
|
||||
.db_time = debounce_time_mt2701,
|
||||
};
|
||||
|
||||
static struct mtk_pin_soc mt7623_data = {
|
||||
|
||||
@@ -402,6 +402,7 @@ static const struct mtk_eint_hw mt7629_eint_hw = {
|
||||
.ports = 7,
|
||||
.ap_num = ARRAY_SIZE(mt7629_pins),
|
||||
.db_cnt = 16,
|
||||
.db_time = debounce_time_mt2701,
|
||||
};
|
||||
|
||||
static struct mtk_pin_soc mt7629_data = {
|
||||
|
||||
@@ -826,6 +826,7 @@ static const struct mtk_eint_hw mt7986a_eint_hw = {
|
||||
.ports = 7,
|
||||
.ap_num = ARRAY_SIZE(mt7986a_pins),
|
||||
.db_cnt = 16,
|
||||
.db_time = debounce_time_mt6765,
|
||||
};
|
||||
|
||||
static const struct mtk_eint_hw mt7986b_eint_hw = {
|
||||
@@ -833,6 +834,7 @@ static const struct mtk_eint_hw mt7986b_eint_hw = {
|
||||
.ports = 7,
|
||||
.ap_num = ARRAY_SIZE(mt7986b_pins),
|
||||
.db_cnt = 16,
|
||||
.db_time = debounce_time_mt6765,
|
||||
};
|
||||
|
||||
static struct mtk_pin_soc mt7986a_data = {
|
||||
|
||||
@@ -286,6 +286,7 @@ static const struct mtk_pinctrl_devdata mt8127_pinctrl_data = {
|
||||
.ports = 6,
|
||||
.ap_num = 143,
|
||||
.db_cnt = 16,
|
||||
.db_time = debounce_time_mt2701,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -315,6 +315,7 @@ static const struct mtk_pinctrl_devdata mt8135_pinctrl_data = {
|
||||
.ports = 6,
|
||||
.ap_num = 192,
|
||||
.db_cnt = 16,
|
||||
.db_time = debounce_time_mt2701,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -319,6 +319,7 @@ static const struct mtk_pinctrl_devdata mt8167_pinctrl_data = {
|
||||
.ports = 6,
|
||||
.ap_num = 169,
|
||||
.db_cnt = 64,
|
||||
.db_time = debounce_time_mt6795,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -327,6 +327,7 @@ static const struct mtk_pinctrl_devdata mt8173_pinctrl_data = {
|
||||
.ports = 6,
|
||||
.ap_num = 224,
|
||||
.db_cnt = 16,
|
||||
.db_time = debounce_time_mt2701,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -545,6 +545,7 @@ static const struct mtk_eint_hw mt8183_eint_hw = {
|
||||
.ports = 6,
|
||||
.ap_num = 212,
|
||||
.db_cnt = 13,
|
||||
.db_time = debounce_time_mt6765,
|
||||
};
|
||||
|
||||
static const struct mtk_pin_soc mt8183_data = {
|
||||
|
||||
@@ -1222,6 +1222,7 @@ static const struct mtk_eint_hw mt8186_eint_hw = {
|
||||
.ports = 7,
|
||||
.ap_num = 217,
|
||||
.db_cnt = 32,
|
||||
.db_time = debounce_time_mt6765,
|
||||
};
|
||||
|
||||
static const struct mtk_pin_soc mt8186_data = {
|
||||
|
||||
@@ -1625,6 +1625,7 @@ static const struct mtk_eint_hw mt8188_eint_hw = {
|
||||
.ports = 7,
|
||||
.ap_num = 225,
|
||||
.db_cnt = 32,
|
||||
.db_time = debounce_time_mt6765,
|
||||
};
|
||||
|
||||
static const struct mtk_pin_soc mt8188_data = {
|
||||
|
||||
@@ -1371,6 +1371,7 @@ static const struct mtk_eint_hw mt8192_eint_hw = {
|
||||
.ports = 7,
|
||||
.ap_num = 224,
|
||||
.db_cnt = 32,
|
||||
.db_time = debounce_time_mt6765,
|
||||
};
|
||||
|
||||
static const struct mtk_pin_reg_calc mt8192_reg_cals[PINCTRL_PIN_REG_MAX] = {
|
||||
|
||||
@@ -935,6 +935,7 @@ static const struct mtk_eint_hw mt8195_eint_hw = {
|
||||
.ports = 7,
|
||||
.ap_num = 225,
|
||||
.db_cnt = 32,
|
||||
.db_time = debounce_time_mt6765,
|
||||
};
|
||||
|
||||
static const struct mtk_pin_soc mt8195_data = {
|
||||
|
||||
@@ -453,6 +453,7 @@ static const struct mtk_pinctrl_devdata mt8365_pinctrl_data = {
|
||||
.ports = 5,
|
||||
.ap_num = 160,
|
||||
.db_cnt = 160,
|
||||
.db_time = debounce_time_mt6765,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -319,6 +319,7 @@ static const struct mtk_pinctrl_devdata mt8516_pinctrl_data = {
|
||||
.ports = 6,
|
||||
.ap_num = 169,
|
||||
.db_cnt = 64,
|
||||
.db_time = debounce_time_mt6795,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -709,6 +709,9 @@ static int mtk_pinconf_bias_set_rsel(struct mtk_pinctrl *hw,
|
||||
{
|
||||
int err, rsel_val;
|
||||
|
||||
if (!pullup && arg == MTK_DISABLE)
|
||||
return 0;
|
||||
|
||||
if (hw->rsel_si_unit) {
|
||||
/* find pin rsel_index from pin_rsel array*/
|
||||
err = mtk_hw_pin_rsel_lookup(hw, desc, pullup, arg, &rsel_val);
|
||||
|
||||
@@ -679,14 +679,54 @@ static void rockchip_get_recalced_mux(struct rockchip_pin_bank *bank, int pin,
|
||||
}
|
||||
|
||||
static struct rockchip_mux_route_data px30_mux_route_data[] = {
|
||||
RK_MUXROUTE_SAME(2, RK_PB4, 1, 0x184, BIT(16 + 7)), /* cif-d0m0 */
|
||||
RK_MUXROUTE_SAME(3, RK_PA1, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d0m1 */
|
||||
RK_MUXROUTE_SAME(2, RK_PB6, 1, 0x184, BIT(16 + 7)), /* cif-d1m0 */
|
||||
RK_MUXROUTE_SAME(3, RK_PA2, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d1m1 */
|
||||
RK_MUXROUTE_SAME(2, RK_PA0, 1, 0x184, BIT(16 + 7)), /* cif-d2m0 */
|
||||
RK_MUXROUTE_SAME(3, RK_PA3, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d2m1 */
|
||||
RK_MUXROUTE_SAME(2, RK_PA1, 1, 0x184, BIT(16 + 7)), /* cif-d3m0 */
|
||||
RK_MUXROUTE_SAME(3, RK_PA5, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d3m1 */
|
||||
RK_MUXROUTE_SAME(2, RK_PA2, 1, 0x184, BIT(16 + 7)), /* cif-d4m0 */
|
||||
RK_MUXROUTE_SAME(3, RK_PA7, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d4m1 */
|
||||
RK_MUXROUTE_SAME(2, RK_PA3, 1, 0x184, BIT(16 + 7)), /* cif-d5m0 */
|
||||
RK_MUXROUTE_SAME(3, RK_PB0, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d5m1 */
|
||||
RK_MUXROUTE_SAME(2, RK_PA4, 1, 0x184, BIT(16 + 7)), /* cif-d6m0 */
|
||||
RK_MUXROUTE_SAME(3, RK_PB1, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d6m1 */
|
||||
RK_MUXROUTE_SAME(2, RK_PA5, 1, 0x184, BIT(16 + 7)), /* cif-d7m0 */
|
||||
RK_MUXROUTE_SAME(3, RK_PB4, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d7m1 */
|
||||
RK_MUXROUTE_SAME(2, RK_PA6, 1, 0x184, BIT(16 + 7)), /* cif-d8m0 */
|
||||
RK_MUXROUTE_SAME(3, RK_PB6, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d8m1 */
|
||||
RK_MUXROUTE_SAME(2, RK_PA7, 1, 0x184, BIT(16 + 7)), /* cif-d9m0 */
|
||||
RK_MUXROUTE_SAME(3, RK_PB7, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d9m1 */
|
||||
RK_MUXROUTE_SAME(2, RK_PB7, 1, 0x184, BIT(16 + 7)), /* cif-d10m0 */
|
||||
RK_MUXROUTE_SAME(3, RK_PC6, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d10m1 */
|
||||
RK_MUXROUTE_SAME(2, RK_PC0, 1, 0x184, BIT(16 + 7)), /* cif-d11m0 */
|
||||
RK_MUXROUTE_SAME(3, RK_PC7, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d11m1 */
|
||||
RK_MUXROUTE_SAME(2, RK_PB0, 1, 0x184, BIT(16 + 7)), /* cif-vsyncm0 */
|
||||
RK_MUXROUTE_SAME(3, RK_PD1, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-vsyncm1 */
|
||||
RK_MUXROUTE_SAME(2, RK_PB1, 1, 0x184, BIT(16 + 7)), /* cif-hrefm0 */
|
||||
RK_MUXROUTE_SAME(3, RK_PD2, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-hrefm1 */
|
||||
RK_MUXROUTE_SAME(2, RK_PB2, 1, 0x184, BIT(16 + 7)), /* cif-clkinm0 */
|
||||
RK_MUXROUTE_SAME(3, RK_PD3, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-clkinm1 */
|
||||
RK_MUXROUTE_SAME(2, RK_PB3, 1, 0x184, BIT(16 + 7)), /* cif-clkoutm0 */
|
||||
RK_MUXROUTE_SAME(3, RK_PD0, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-clkoutm1 */
|
||||
RK_MUXROUTE_SAME(3, RK_PC6, 2, 0x184, BIT(16 + 8)), /* pdm-m0 */
|
||||
RK_MUXROUTE_SAME(2, RK_PC6, 1, 0x184, BIT(16 + 8) | BIT(8)), /* pdm-m1 */
|
||||
RK_MUXROUTE_SAME(3, RK_PD3, 2, 0x184, BIT(16 + 8)), /* pdm-sdi0m0 */
|
||||
RK_MUXROUTE_SAME(2, RK_PC5, 2, 0x184, BIT(16 + 8) | BIT(8)), /* pdm-sdi0m1 */
|
||||
RK_MUXROUTE_SAME(1, RK_PD3, 2, 0x184, BIT(16 + 10)), /* uart2-rxm0 */
|
||||
RK_MUXROUTE_SAME(2, RK_PB6, 2, 0x184, BIT(16 + 10) | BIT(10)), /* uart2-rxm1 */
|
||||
RK_MUXROUTE_SAME(1, RK_PD2, 2, 0x184, BIT(16 + 10)), /* uart2-txm0 */
|
||||
RK_MUXROUTE_SAME(2, RK_PB4, 2, 0x184, BIT(16 + 10) | BIT(10)), /* uart2-txm1 */
|
||||
RK_MUXROUTE_SAME(0, RK_PC1, 2, 0x184, BIT(16 + 9)), /* uart3-rxm0 */
|
||||
RK_MUXROUTE_SAME(1, RK_PB7, 2, 0x184, BIT(16 + 9) | BIT(9)), /* uart3-rxm1 */
|
||||
RK_MUXROUTE_SAME(0, RK_PC0, 2, 0x184, BIT(16 + 9)), /* uart3-txm0 */
|
||||
RK_MUXROUTE_SAME(1, RK_PB6, 2, 0x184, BIT(16 + 9) | BIT(9)), /* uart3-txm1 */
|
||||
RK_MUXROUTE_SAME(0, RK_PC2, 2, 0x184, BIT(16 + 9)), /* uart3-ctsm0 */
|
||||
RK_MUXROUTE_SAME(1, RK_PB4, 2, 0x184, BIT(16 + 9) | BIT(9)), /* uart3-ctsm1 */
|
||||
RK_MUXROUTE_SAME(0, RK_PC3, 2, 0x184, BIT(16 + 9)), /* uart3-rtsm0 */
|
||||
RK_MUXROUTE_SAME(1, RK_PB5, 2, 0x184, BIT(16 + 9) | BIT(9)), /* uart3-rtsm1 */
|
||||
};
|
||||
|
||||
static struct rockchip_mux_route_data rv1126_mux_route_data[] = {
|
||||
|
||||
@@ -1873,8 +1873,8 @@ static const struct msm_pingroup sc8280xp_groups[] = {
|
||||
[225] = PINGROUP(225, hs3_mi2s, phase_flag, _, _, _, _, egpio),
|
||||
[226] = PINGROUP(226, hs3_mi2s, phase_flag, _, _, _, _, egpio),
|
||||
[227] = PINGROUP(227, hs3_mi2s, phase_flag, _, _, _, _, egpio),
|
||||
[228] = UFS_RESET(ufs_reset, 0xf1004),
|
||||
[229] = UFS_RESET(ufs1_reset, 0xf3004),
|
||||
[228] = UFS_RESET(ufs_reset, 0xf1000),
|
||||
[229] = UFS_RESET(ufs1_reset, 0xf3000),
|
||||
[230] = SDC_QDSD_PINGROUP(sdc2_clk, 0xe8000, 14, 6),
|
||||
[231] = SDC_QDSD_PINGROUP(sdc2_cmd, 0xe8000, 11, 3),
|
||||
[232] = SDC_QDSD_PINGROUP(sdc2_data, 0xe8000, 9, 0),
|
||||
|
||||
Reference in New Issue
Block a user