1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
4 * Copyright (c) 2020 Linaro Ltd.
7 #include <linux/bitops.h>
8 #include <linux/bitfield.h>
10 #include <linux/gpio/driver.h>
12 #include <linux/module.h>
13 #include <linux/of_device.h>
15 #include <linux/pinctrl/pinconf-generic.h>
16 #include <linux/pinctrl/pinconf.h>
17 #include <linux/pinctrl/pinmux.h>
18 #include <linux/platform_device.h>
19 #include <linux/slab.h>
20 #include <linux/types.h>
22 #include "../pinctrl-utils.h"
24 #define LPI_SLEW_RATE_CTL_REG 0xa000
25 #define LPI_TLMM_REG_OFFSET 0x1000
26 #define LPI_SLEW_RATE_MAX 0x03
27 #define LPI_SLEW_BITS_SIZE 0x02
28 #define LPI_SLEW_RATE_MASK GENMASK(1, 0)
29 #define LPI_GPIO_CFG_REG 0x00
30 #define LPI_GPIO_PULL_MASK GENMASK(1, 0)
31 #define LPI_GPIO_FUNCTION_MASK GENMASK(5, 2)
32 #define LPI_GPIO_OUT_STRENGTH_MASK GENMASK(8, 6)
33 #define LPI_GPIO_OE_MASK BIT(9)
34 #define LPI_GPIO_VALUE_REG 0x04
35 #define LPI_GPIO_VALUE_IN_MASK BIT(0)
36 #define LPI_GPIO_VALUE_OUT_MASK BIT(1)
38 #define LPI_GPIO_BIAS_DISABLE 0x0
39 #define LPI_GPIO_PULL_DOWN 0x1
40 #define LPI_GPIO_KEEPER 0x2
41 #define LPI_GPIO_PULL_UP 0x3
42 #define LPI_GPIO_DS_TO_VAL(v) (v / 2 - 1)
45 #define LPI_FUNCTION(fname) \
46 [LPI_MUX_##fname] = { \
48 .groups = fname##_groups, \
49 .ngroups = ARRAY_SIZE(fname##_groups), \
52 #define LPI_PINGROUP(id, soff, f1, f2, f3, f4) \
55 .pins = gpio##id##_pins, \
57 .slew_offset = soff, \
58 .npins = ARRAY_SIZE(gpio##id##_pins), \
71 const unsigned int *pins
;
74 /* Bit offset in slew register for SoundWire pins only */
82 const char * const *groups
;
86 struct lpi_pinctrl_variant_data
{
87 const struct pinctrl_pin_desc
*pins
;
89 const struct lpi_pingroup
*groups
;
91 const struct lpi_function
*functions
;
95 #define MAX_LPI_NUM_CLKS 2
99 struct pinctrl_dev
*ctrl
;
100 struct gpio_chip chip
;
101 struct pinctrl_desc desc
;
102 char __iomem
*tlmm_base
;
103 char __iomem
*slew_base
;
104 struct clk_bulk_data clks
[MAX_LPI_NUM_CLKS
];
105 struct mutex slew_access_lock
;
106 const struct lpi_pinctrl_variant_data
*data
;
109 /* sm8250 variant specific data */
110 static const struct pinctrl_pin_desc sm8250_lpi_pins
[] = {
111 PINCTRL_PIN(0, "gpio0"),
112 PINCTRL_PIN(1, "gpio1"),
113 PINCTRL_PIN(2, "gpio2"),
114 PINCTRL_PIN(3, "gpio3"),
115 PINCTRL_PIN(4, "gpio4"),
116 PINCTRL_PIN(5, "gpio5"),
117 PINCTRL_PIN(6, "gpio6"),
118 PINCTRL_PIN(7, "gpio7"),
119 PINCTRL_PIN(8, "gpio8"),
120 PINCTRL_PIN(9, "gpio9"),
121 PINCTRL_PIN(10, "gpio10"),
122 PINCTRL_PIN(11, "gpio11"),
123 PINCTRL_PIN(12, "gpio12"),
124 PINCTRL_PIN(13, "gpio13"),
127 enum sm8250_lpi_functions
{
140 LPI_MUX_qua_mi2s_data
,
141 LPI_MUX_qua_mi2s_sclk
,
148 LPI_MUX_wsa_swr_data
,
153 static const unsigned int gpio0_pins
[] = { 0 };
154 static const unsigned int gpio1_pins
[] = { 1 };
155 static const unsigned int gpio2_pins
[] = { 2 };
156 static const unsigned int gpio3_pins
[] = { 3 };
157 static const unsigned int gpio4_pins
[] = { 4 };
158 static const unsigned int gpio5_pins
[] = { 5 };
159 static const unsigned int gpio6_pins
[] = { 6 };
160 static const unsigned int gpio7_pins
[] = { 7 };
161 static const unsigned int gpio8_pins
[] = { 8 };
162 static const unsigned int gpio9_pins
[] = { 9 };
163 static const unsigned int gpio10_pins
[] = { 10 };
164 static const unsigned int gpio11_pins
[] = { 11 };
165 static const unsigned int gpio12_pins
[] = { 12 };
166 static const unsigned int gpio13_pins
[] = { 13 };
167 static const char * const swr_tx_clk_groups
[] = { "gpio0" };
168 static const char * const swr_tx_data_groups
[] = { "gpio1", "gpio2", "gpio5" };
169 static const char * const swr_rx_clk_groups
[] = { "gpio3" };
170 static const char * const swr_rx_data_groups
[] = { "gpio4", "gpio5" };
171 static const char * const dmic1_clk_groups
[] = { "gpio6" };
172 static const char * const dmic1_data_groups
[] = { "gpio7" };
173 static const char * const dmic2_clk_groups
[] = { "gpio8" };
174 static const char * const dmic2_data_groups
[] = { "gpio9" };
175 static const char * const i2s2_clk_groups
[] = { "gpio10" };
176 static const char * const i2s2_ws_groups
[] = { "gpio11" };
177 static const char * const dmic3_clk_groups
[] = { "gpio12" };
178 static const char * const dmic3_data_groups
[] = { "gpio13" };
179 static const char * const qua_mi2s_sclk_groups
[] = { "gpio0" };
180 static const char * const qua_mi2s_ws_groups
[] = { "gpio1" };
181 static const char * const qua_mi2s_data_groups
[] = { "gpio2", "gpio3", "gpio4" };
182 static const char * const i2s1_clk_groups
[] = { "gpio6" };
183 static const char * const i2s1_ws_groups
[] = { "gpio7" };
184 static const char * const i2s1_data_groups
[] = { "gpio8", "gpio9" };
185 static const char * const wsa_swr_clk_groups
[] = { "gpio10" };
186 static const char * const wsa_swr_data_groups
[] = { "gpio11" };
187 static const char * const i2s2_data_groups
[] = { "gpio12", "gpio12" };
189 static const struct lpi_pingroup sm8250_groups
[] = {
190 LPI_PINGROUP(0, 0, swr_tx_clk
, qua_mi2s_sclk
, _
, _
),
191 LPI_PINGROUP(1, 2, swr_tx_data
, qua_mi2s_ws
, _
, _
),
192 LPI_PINGROUP(2, 4, swr_tx_data
, qua_mi2s_data
, _
, _
),
193 LPI_PINGROUP(3, 8, swr_rx_clk
, qua_mi2s_data
, _
, _
),
194 LPI_PINGROUP(4, 10, swr_rx_data
, qua_mi2s_data
, _
, _
),
195 LPI_PINGROUP(5, 12, swr_tx_data
, swr_rx_data
, _
, _
),
196 LPI_PINGROUP(6, NO_SLEW
, dmic1_clk
, i2s1_clk
, _
, _
),
197 LPI_PINGROUP(7, NO_SLEW
, dmic1_data
, i2s1_ws
, _
, _
),
198 LPI_PINGROUP(8, NO_SLEW
, dmic2_clk
, i2s1_data
, _
, _
),
199 LPI_PINGROUP(9, NO_SLEW
, dmic2_data
, i2s1_data
, _
, _
),
200 LPI_PINGROUP(10, 16, i2s2_clk
, wsa_swr_clk
, _
, _
),
201 LPI_PINGROUP(11, 18, i2s2_ws
, wsa_swr_data
, _
, _
),
202 LPI_PINGROUP(12, NO_SLEW
, dmic3_clk
, i2s2_data
, _
, _
),
203 LPI_PINGROUP(13, NO_SLEW
, dmic3_data
, i2s2_data
, _
, _
),
206 static const struct lpi_function sm8250_functions
[] = {
207 LPI_FUNCTION(dmic1_clk
),
208 LPI_FUNCTION(dmic1_data
),
209 LPI_FUNCTION(dmic2_clk
),
210 LPI_FUNCTION(dmic2_data
),
211 LPI_FUNCTION(dmic3_clk
),
212 LPI_FUNCTION(dmic3_data
),
213 LPI_FUNCTION(i2s1_clk
),
214 LPI_FUNCTION(i2s1_data
),
215 LPI_FUNCTION(i2s1_ws
),
216 LPI_FUNCTION(i2s2_clk
),
217 LPI_FUNCTION(i2s2_data
),
218 LPI_FUNCTION(i2s2_ws
),
219 LPI_FUNCTION(qua_mi2s_data
),
220 LPI_FUNCTION(qua_mi2s_sclk
),
221 LPI_FUNCTION(qua_mi2s_ws
),
222 LPI_FUNCTION(swr_rx_clk
),
223 LPI_FUNCTION(swr_rx_data
),
224 LPI_FUNCTION(swr_tx_clk
),
225 LPI_FUNCTION(swr_tx_data
),
226 LPI_FUNCTION(wsa_swr_clk
),
227 LPI_FUNCTION(wsa_swr_data
),
230 static struct lpi_pinctrl_variant_data sm8250_lpi_data
= {
231 .pins
= sm8250_lpi_pins
,
232 .npins
= ARRAY_SIZE(sm8250_lpi_pins
),
233 .groups
= sm8250_groups
,
234 .ngroups
= ARRAY_SIZE(sm8250_groups
),
235 .functions
= sm8250_functions
,
236 .nfunctions
= ARRAY_SIZE(sm8250_functions
),
239 static int lpi_gpio_read(struct lpi_pinctrl
*state
, unsigned int pin
,
242 return ioread32(state
->tlmm_base
+ LPI_TLMM_REG_OFFSET
* pin
+ addr
);
245 static int lpi_gpio_write(struct lpi_pinctrl
*state
, unsigned int pin
,
246 unsigned int addr
, unsigned int val
)
248 iowrite32(val
, state
->tlmm_base
+ LPI_TLMM_REG_OFFSET
* pin
+ addr
);
253 static int lpi_gpio_get_groups_count(struct pinctrl_dev
*pctldev
)
255 struct lpi_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
257 return pctrl
->data
->ngroups
;
260 static const char *lpi_gpio_get_group_name(struct pinctrl_dev
*pctldev
,
263 struct lpi_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
265 return pctrl
->data
->groups
[group
].name
;
268 static int lpi_gpio_get_group_pins(struct pinctrl_dev
*pctldev
,
270 const unsigned int **pins
,
271 unsigned int *num_pins
)
273 struct lpi_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
275 *pins
= pctrl
->data
->groups
[group
].pins
;
276 *num_pins
= pctrl
->data
->groups
[group
].npins
;
281 static const struct pinctrl_ops lpi_gpio_pinctrl_ops
= {
282 .get_groups_count
= lpi_gpio_get_groups_count
,
283 .get_group_name
= lpi_gpio_get_group_name
,
284 .get_group_pins
= lpi_gpio_get_group_pins
,
285 .dt_node_to_map
= pinconf_generic_dt_node_to_map_group
,
286 .dt_free_map
= pinctrl_utils_free_map
,
289 static int lpi_gpio_get_functions_count(struct pinctrl_dev
*pctldev
)
291 struct lpi_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
293 return pctrl
->data
->nfunctions
;
296 static const char *lpi_gpio_get_function_name(struct pinctrl_dev
*pctldev
,
297 unsigned int function
)
299 struct lpi_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
301 return pctrl
->data
->functions
[function
].name
;
304 static int lpi_gpio_get_function_groups(struct pinctrl_dev
*pctldev
,
305 unsigned int function
,
306 const char *const **groups
,
307 unsigned *const num_qgroups
)
309 struct lpi_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
311 *groups
= pctrl
->data
->functions
[function
].groups
;
312 *num_qgroups
= pctrl
->data
->functions
[function
].ngroups
;
317 static int lpi_gpio_set_mux(struct pinctrl_dev
*pctldev
, unsigned int function
,
318 unsigned int group_num
)
320 struct lpi_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
321 const struct lpi_pingroup
*g
= &pctrl
->data
->groups
[group_num
];
325 for (i
= 0; i
< g
->nfuncs
; i
++) {
326 if (g
->funcs
[i
] == function
)
330 if (WARN_ON(i
== g
->nfuncs
))
333 val
= lpi_gpio_read(pctrl
, pin
, LPI_GPIO_CFG_REG
);
334 u32p_replace_bits(&val
, i
, LPI_GPIO_FUNCTION_MASK
);
335 lpi_gpio_write(pctrl
, pin
, LPI_GPIO_CFG_REG
, val
);
340 static const struct pinmux_ops lpi_gpio_pinmux_ops
= {
341 .get_functions_count
= lpi_gpio_get_functions_count
,
342 .get_function_name
= lpi_gpio_get_function_name
,
343 .get_function_groups
= lpi_gpio_get_function_groups
,
344 .set_mux
= lpi_gpio_set_mux
,
347 static int lpi_config_get(struct pinctrl_dev
*pctldev
,
348 unsigned int pin
, unsigned long *config
)
350 unsigned int param
= pinconf_to_config_param(*config
);
351 struct lpi_pinctrl
*state
= dev_get_drvdata(pctldev
->dev
);
352 unsigned int arg
= 0;
357 ctl_reg
= lpi_gpio_read(state
, pin
, LPI_GPIO_CFG_REG
);
358 is_out
= ctl_reg
& LPI_GPIO_OE_MASK
;
359 pull
= FIELD_GET(LPI_GPIO_PULL_MASK
, ctl_reg
);
362 case PIN_CONFIG_BIAS_DISABLE
:
363 if (pull
== LPI_GPIO_BIAS_DISABLE
)
366 case PIN_CONFIG_BIAS_PULL_DOWN
:
367 if (pull
== LPI_GPIO_PULL_DOWN
)
370 case PIN_CONFIG_BIAS_BUS_HOLD
:
371 if (pull
== LPI_GPIO_KEEPER
)
374 case PIN_CONFIG_BIAS_PULL_UP
:
375 if (pull
== LPI_GPIO_PULL_UP
)
378 case PIN_CONFIG_INPUT_ENABLE
:
379 case PIN_CONFIG_OUTPUT
:
387 *config
= pinconf_to_config_packed(param
, arg
);
391 static int lpi_config_set(struct pinctrl_dev
*pctldev
, unsigned int group
,
392 unsigned long *configs
, unsigned int nconfs
)
394 struct lpi_pinctrl
*pctrl
= dev_get_drvdata(pctldev
->dev
);
395 unsigned int param
, arg
, pullup
, strength
;
396 bool value
, output_enabled
= false;
397 const struct lpi_pingroup
*g
;
402 g
= &pctrl
->data
->groups
[group
];
403 for (i
= 0; i
< nconfs
; i
++) {
404 param
= pinconf_to_config_param(configs
[i
]);
405 arg
= pinconf_to_config_argument(configs
[i
]);
408 case PIN_CONFIG_BIAS_DISABLE
:
409 pullup
= LPI_GPIO_BIAS_DISABLE
;
411 case PIN_CONFIG_BIAS_PULL_DOWN
:
412 pullup
= LPI_GPIO_PULL_DOWN
;
414 case PIN_CONFIG_BIAS_BUS_HOLD
:
415 pullup
= LPI_GPIO_KEEPER
;
417 case PIN_CONFIG_BIAS_PULL_UP
:
418 pullup
= LPI_GPIO_PULL_UP
;
420 case PIN_CONFIG_INPUT_ENABLE
:
421 output_enabled
= false;
423 case PIN_CONFIG_OUTPUT
:
424 output_enabled
= true;
427 case PIN_CONFIG_DRIVE_STRENGTH
:
430 case PIN_CONFIG_SLEW_RATE
:
431 if (arg
> LPI_SLEW_RATE_MAX
) {
432 dev_err(pctldev
->dev
, "invalid slew rate %u for pin: %d\n",
437 slew_offset
= g
->slew_offset
;
438 if (slew_offset
== NO_SLEW
)
441 mutex_lock(&pctrl
->slew_access_lock
);
443 sval
= ioread32(pctrl
->slew_base
+ LPI_SLEW_RATE_CTL_REG
);
444 sval
&= ~(LPI_SLEW_RATE_MASK
<< slew_offset
);
445 sval
|= arg
<< slew_offset
;
446 iowrite32(sval
, pctrl
->slew_base
+ LPI_SLEW_RATE_CTL_REG
);
448 mutex_unlock(&pctrl
->slew_access_lock
);
455 val
= lpi_gpio_read(pctrl
, group
, LPI_GPIO_CFG_REG
);
457 u32p_replace_bits(&val
, pullup
, LPI_GPIO_PULL_MASK
);
458 u32p_replace_bits(&val
, LPI_GPIO_DS_TO_VAL(strength
),
459 LPI_GPIO_OUT_STRENGTH_MASK
);
460 u32p_replace_bits(&val
, output_enabled
, LPI_GPIO_OE_MASK
);
462 lpi_gpio_write(pctrl
, group
, LPI_GPIO_CFG_REG
, val
);
464 if (output_enabled
) {
465 val
= u32_encode_bits(value
? 1 : 0, LPI_GPIO_VALUE_OUT_MASK
);
466 lpi_gpio_write(pctrl
, group
, LPI_GPIO_VALUE_REG
, val
);
472 static const struct pinconf_ops lpi_gpio_pinconf_ops
= {
474 .pin_config_group_get
= lpi_config_get
,
475 .pin_config_group_set
= lpi_config_set
,
478 static int lpi_gpio_direction_input(struct gpio_chip
*chip
, unsigned int pin
)
480 struct lpi_pinctrl
*state
= gpiochip_get_data(chip
);
481 unsigned long config
;
483 config
= pinconf_to_config_packed(PIN_CONFIG_INPUT_ENABLE
, 1);
485 return lpi_config_set(state
->ctrl
, pin
, &config
, 1);
488 static int lpi_gpio_direction_output(struct gpio_chip
*chip
,
489 unsigned int pin
, int val
)
491 struct lpi_pinctrl
*state
= gpiochip_get_data(chip
);
492 unsigned long config
;
494 config
= pinconf_to_config_packed(PIN_CONFIG_OUTPUT
, val
);
496 return lpi_config_set(state
->ctrl
, pin
, &config
, 1);
499 static int lpi_gpio_get(struct gpio_chip
*chip
, unsigned int pin
)
501 struct lpi_pinctrl
*state
= gpiochip_get_data(chip
);
503 return lpi_gpio_read(state
, pin
, LPI_GPIO_VALUE_REG
) &
504 LPI_GPIO_VALUE_IN_MASK
;
507 static void lpi_gpio_set(struct gpio_chip
*chip
, unsigned int pin
, int value
)
509 struct lpi_pinctrl
*state
= gpiochip_get_data(chip
);
510 unsigned long config
;
512 config
= pinconf_to_config_packed(PIN_CONFIG_OUTPUT
, value
);
514 lpi_config_set(state
->ctrl
, pin
, &config
, 1);
517 #ifdef CONFIG_DEBUG_FS
518 #include <linux/seq_file.h>
520 static unsigned int lpi_regval_to_drive(u32 val
)
522 return (val
+ 1) * 2;
525 static void lpi_gpio_dbg_show_one(struct seq_file
*s
,
526 struct pinctrl_dev
*pctldev
,
527 struct gpio_chip
*chip
,
531 struct lpi_pinctrl
*state
= gpiochip_get_data(chip
);
532 struct pinctrl_pin_desc pindesc
;
539 static const char * const pulls
[] = {
546 pctldev
= pctldev
? : state
->ctrl
;
547 pindesc
= pctldev
->desc
->pins
[offset
];
548 ctl_reg
= lpi_gpio_read(state
, offset
, LPI_GPIO_CFG_REG
);
549 is_out
= ctl_reg
& LPI_GPIO_OE_MASK
;
551 func
= FIELD_GET(LPI_GPIO_FUNCTION_MASK
, ctl_reg
);
552 drive
= FIELD_GET(LPI_GPIO_OUT_STRENGTH_MASK
, ctl_reg
);
553 pull
= FIELD_GET(LPI_GPIO_PULL_MASK
, ctl_reg
);
555 seq_printf(s
, " %-8s: %-3s %d", pindesc
.name
, is_out
? "out" : "in", func
);
556 seq_printf(s
, " %dmA", lpi_regval_to_drive(drive
));
557 seq_printf(s
, " %s", pulls
[pull
]);
560 static void lpi_gpio_dbg_show(struct seq_file
*s
, struct gpio_chip
*chip
)
562 unsigned int gpio
= chip
->base
;
565 for (i
= 0; i
< chip
->ngpio
; i
++, gpio
++) {
566 lpi_gpio_dbg_show_one(s
, NULL
, chip
, i
, gpio
);
572 #define lpi_gpio_dbg_show NULL
575 static const struct gpio_chip lpi_gpio_template
= {
576 .direction_input
= lpi_gpio_direction_input
,
577 .direction_output
= lpi_gpio_direction_output
,
580 .request
= gpiochip_generic_request
,
581 .free
= gpiochip_generic_free
,
582 .dbg_show
= lpi_gpio_dbg_show
,
585 static int lpi_pinctrl_probe(struct platform_device
*pdev
)
587 const struct lpi_pinctrl_variant_data
*data
;
588 struct device
*dev
= &pdev
->dev
;
589 struct lpi_pinctrl
*pctrl
;
592 pctrl
= devm_kzalloc(dev
, sizeof(*pctrl
), GFP_KERNEL
);
596 platform_set_drvdata(pdev
, pctrl
);
598 data
= of_device_get_match_data(dev
);
603 pctrl
->dev
= &pdev
->dev
;
605 pctrl
->clks
[0].id
= "core";
606 pctrl
->clks
[1].id
= "audio";
608 pctrl
->tlmm_base
= devm_platform_ioremap_resource(pdev
, 0);
609 if (IS_ERR(pctrl
->tlmm_base
))
610 return dev_err_probe(dev
, PTR_ERR(pctrl
->tlmm_base
),
611 "TLMM resource not provided\n");
613 pctrl
->slew_base
= devm_platform_ioremap_resource(pdev
, 1);
614 if (IS_ERR(pctrl
->slew_base
))
615 return dev_err_probe(dev
, PTR_ERR(pctrl
->slew_base
),
616 "Slew resource not provided\n");
618 ret
= devm_clk_bulk_get(dev
, MAX_LPI_NUM_CLKS
, pctrl
->clks
);
620 return dev_err_probe(dev
, ret
, "Can't get clocks\n");
622 ret
= clk_bulk_prepare_enable(MAX_LPI_NUM_CLKS
, pctrl
->clks
);
624 return dev_err_probe(dev
, ret
, "Can't enable clocks\n");
626 pctrl
->desc
.pctlops
= &lpi_gpio_pinctrl_ops
;
627 pctrl
->desc
.pmxops
= &lpi_gpio_pinmux_ops
;
628 pctrl
->desc
.confops
= &lpi_gpio_pinconf_ops
;
629 pctrl
->desc
.owner
= THIS_MODULE
;
630 pctrl
->desc
.name
= dev_name(dev
);
631 pctrl
->desc
.pins
= data
->pins
;
632 pctrl
->desc
.npins
= data
->npins
;
633 pctrl
->chip
= lpi_gpio_template
;
634 pctrl
->chip
.parent
= dev
;
635 pctrl
->chip
.base
= -1;
636 pctrl
->chip
.ngpio
= data
->npins
;
637 pctrl
->chip
.label
= dev_name(dev
);
638 pctrl
->chip
.of_gpio_n_cells
= 2;
639 pctrl
->chip
.can_sleep
= false;
641 mutex_init(&pctrl
->slew_access_lock
);
643 pctrl
->ctrl
= devm_pinctrl_register(dev
, &pctrl
->desc
, pctrl
);
644 if (IS_ERR(pctrl
->ctrl
)) {
645 ret
= PTR_ERR(pctrl
->ctrl
);
646 dev_err(dev
, "failed to add pin controller\n");
650 ret
= devm_gpiochip_add_data(dev
, &pctrl
->chip
, pctrl
);
652 dev_err(pctrl
->dev
, "can't add gpio chip\n");
659 mutex_destroy(&pctrl
->slew_access_lock
);
660 clk_bulk_disable_unprepare(MAX_LPI_NUM_CLKS
, pctrl
->clks
);
665 static int lpi_pinctrl_remove(struct platform_device
*pdev
)
667 struct lpi_pinctrl
*pctrl
= platform_get_drvdata(pdev
);
669 mutex_destroy(&pctrl
->slew_access_lock
);
670 clk_bulk_disable_unprepare(MAX_LPI_NUM_CLKS
, pctrl
->clks
);
675 static const struct of_device_id lpi_pinctrl_of_match
[] = {
677 .compatible
= "qcom,sm8250-lpass-lpi-pinctrl",
678 .data
= &sm8250_lpi_data
,
682 MODULE_DEVICE_TABLE(of
, lpi_pinctrl_of_match
);
684 static struct platform_driver lpi_pinctrl_driver
= {
686 .name
= "qcom-lpass-lpi-pinctrl",
687 .of_match_table
= lpi_pinctrl_of_match
,
689 .probe
= lpi_pinctrl_probe
,
690 .remove
= lpi_pinctrl_remove
,
693 module_platform_driver(lpi_pinctrl_driver
);
694 MODULE_DESCRIPTION("QTI LPI GPIO pin control driver");
695 MODULE_LICENSE("GPL");