GNU Linux-libre 6.9.1-gnu
[releases.git] / drivers / pinctrl / pinctrl-cy8c95x0.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * CY8C95X0 20/40/60 pin I2C GPIO port expander with interrupt support
4  *
5  * Copyright (C) 2022 9elements GmbH
6  * Authors: Patrick Rudolph <patrick.rudolph@9elements.com>
7  *          Naresh Solanki <Naresh.Solanki@9elements.com>
8  */
9
10 #include <linux/acpi.h>
11 #include <linux/bitmap.h>
12 #include <linux/dmi.h>
13 #include <linux/gpio/driver.h>
14 #include <linux/gpio/consumer.h>
15 #include <linux/i2c.h>
16 #include <linux/init.h>
17 #include <linux/interrupt.h>
18 #include <linux/mod_devicetable.h>
19 #include <linux/module.h>
20 #include <linux/property.h>
21 #include <linux/regmap.h>
22 #include <linux/regulator/consumer.h>
23 #include <linux/seq_file.h>
24
25 #include <linux/pinctrl/consumer.h>
26 #include <linux/pinctrl/pinconf.h>
27 #include <linux/pinctrl/pinconf-generic.h>
28 #include <linux/pinctrl/pinctrl.h>
29 #include <linux/pinctrl/pinmux.h>
30
31 /* Fast access registers */
32 #define CY8C95X0_INPUT          0x00
33 #define CY8C95X0_OUTPUT         0x08
34 #define CY8C95X0_INTSTATUS      0x10
35
36 #define CY8C95X0_INPUT_(x)      (CY8C95X0_INPUT + (x))
37 #define CY8C95X0_OUTPUT_(x)     (CY8C95X0_OUTPUT + (x))
38 #define CY8C95X0_INTSTATUS_(x)  (CY8C95X0_INTSTATUS + (x))
39
40 /* Port Select configures the port */
41 #define CY8C95X0_PORTSEL        0x18
42 /* Port settings, write PORTSEL first */
43 #define CY8C95X0_INTMASK        0x19
44 #define CY8C95X0_PWMSEL         0x1A
45 #define CY8C95X0_INVERT         0x1B
46 #define CY8C95X0_DIRECTION      0x1C
47 /* Drive mode register change state on writing '1' */
48 #define CY8C95X0_DRV_PU         0x1D
49 #define CY8C95X0_DRV_PD         0x1E
50 #define CY8C95X0_DRV_ODH        0x1F
51 #define CY8C95X0_DRV_ODL        0x20
52 #define CY8C95X0_DRV_PP_FAST    0x21
53 #define CY8C95X0_DRV_PP_SLOW    0x22
54 #define CY8C95X0_DRV_HIZ        0x23
55 #define CY8C95X0_DEVID          0x2E
56 #define CY8C95X0_WATCHDOG       0x2F
57 #define CY8C95X0_COMMAND        0x30
58
59 #define CY8C95X0_PIN_TO_OFFSET(x) (((x) >= 20) ? ((x) + 4) : (x))
60
61 #define CY8C95X0_MUX_REGMAP_TO_PORT(x) ((x) / MUXED_STRIDE)
62 #define CY8C95X0_MUX_REGMAP_TO_REG(x) (((x) % MUXED_STRIDE) + CY8C95X0_INTMASK)
63 #define CY8C95X0_MUX_REGMAP_TO_OFFSET(x, p) ((x) - CY8C95X0_INTMASK + (p) * MUXED_STRIDE)
64
65 static const struct i2c_device_id cy8c95x0_id[] = {
66         { "cy8c9520", 20, },
67         { "cy8c9540", 40, },
68         { "cy8c9560", 60, },
69         { }
70 };
71 MODULE_DEVICE_TABLE(i2c, cy8c95x0_id);
72
73 #define OF_CY8C95X(__nrgpio) ((void *)(__nrgpio))
74
75 static const struct of_device_id cy8c95x0_dt_ids[] = {
76         { .compatible = "cypress,cy8c9520", .data = OF_CY8C95X(20), },
77         { .compatible = "cypress,cy8c9540", .data = OF_CY8C95X(40), },
78         { .compatible = "cypress,cy8c9560", .data = OF_CY8C95X(60), },
79         { }
80 };
81 MODULE_DEVICE_TABLE(of, cy8c95x0_dt_ids);
82
83 static const struct acpi_gpio_params cy8c95x0_irq_gpios = { 0, 0, true };
84
85 static const struct acpi_gpio_mapping cy8c95x0_acpi_irq_gpios[] = {
86         { "irq-gpios", &cy8c95x0_irq_gpios, 1, ACPI_GPIO_QUIRK_ABSOLUTE_NUMBER },
87         { }
88 };
89
90 static int cy8c95x0_acpi_get_irq(struct device *dev)
91 {
92         int ret;
93
94         ret = devm_acpi_dev_add_driver_gpios(dev, cy8c95x0_acpi_irq_gpios);
95         if (ret)
96                 dev_warn(dev, "can't add GPIO ACPI mapping\n");
97
98         ret = acpi_dev_gpio_irq_get_by(ACPI_COMPANION(dev), "irq-gpios", 0);
99         if (ret < 0)
100                 return ret;
101
102         dev_info(dev, "ACPI interrupt quirk (IRQ %d)\n", ret);
103         return ret;
104 }
105
106 static const struct dmi_system_id cy8c95x0_dmi_acpi_irq_info[] = {
107         {
108                 /*
109                  * On Intel Galileo Gen 1 board the IRQ pin is provided
110                  * as an absolute number instead of being relative.
111                  * Since first controller (gpio-sch.c) and second
112                  * (gpio-dwapb.c) are at the fixed bases, we may safely
113                  * refer to the number in the global space to get an IRQ
114                  * out of it.
115                  */
116                 .matches = {
117                         DMI_EXACT_MATCH(DMI_BOARD_NAME, "Galileo"),
118                 },
119         },
120         {}
121 };
122
123 #define MAX_BANK 8
124 #define BANK_SZ 8
125 #define MAX_LINE        (MAX_BANK * BANK_SZ)
126 #define MUXED_STRIDE    16
127 #define CY8C95X0_GPIO_MASK              GENMASK(7, 0)
128
129 /**
130  * struct cy8c95x0_pinctrl - driver data
131  * @regmap:         Device's regmap. Only direct access registers.
132  * @muxed_regmap:   Regmap for all muxed registers.
133  * @irq_lock:       IRQ bus lock
134  * @i2c_lock:       Mutex for the device internal mux register
135  * @irq_mask:       I/O bits affected by interrupts
136  * @irq_trig_raise: I/O bits affected by raising voltage level
137  * @irq_trig_fall:  I/O bits affected by falling voltage level
138  * @irq_trig_low:   I/O bits affected by a low voltage level
139  * @irq_trig_high:  I/O bits affected by a high voltage level
140  * @push_pull:      I/O bits configured as push pull driver
141  * @shiftmask:      Mask used to compensate for Gport2 width
142  * @nport:          Number of Gports in this chip
143  * @gpio_chip:      gpiolib chip
144  * @driver_data:    private driver data
145  * @regulator:      Pointer to the regulator for the IC
146  * @dev:            struct device
147  * @pctldev:        pin controller device
148  * @pinctrl_desc:   pin controller description
149  * @name:           Chip controller name
150  * @tpin:           Total number of pins
151  * @gpio_reset:     GPIO line handler that can reset the IC
152  */
153 struct cy8c95x0_pinctrl {
154         struct regmap *regmap;
155         struct regmap *muxed_regmap;
156         struct mutex irq_lock;
157         struct mutex i2c_lock;
158         DECLARE_BITMAP(irq_mask, MAX_LINE);
159         DECLARE_BITMAP(irq_trig_raise, MAX_LINE);
160         DECLARE_BITMAP(irq_trig_fall, MAX_LINE);
161         DECLARE_BITMAP(irq_trig_low, MAX_LINE);
162         DECLARE_BITMAP(irq_trig_high, MAX_LINE);
163         DECLARE_BITMAP(push_pull, MAX_LINE);
164         DECLARE_BITMAP(shiftmask, MAX_LINE);
165         int nport;
166         struct gpio_chip gpio_chip;
167         unsigned long driver_data;
168         struct regulator *regulator;
169         struct device *dev;
170         struct pinctrl_dev *pctldev;
171         struct pinctrl_desc pinctrl_desc;
172         char name[32];
173         unsigned int tpin;
174         struct gpio_desc *gpio_reset;
175 };
176
177 static const struct pinctrl_pin_desc cy8c9560_pins[] = {
178         PINCTRL_PIN(0, "gp00"),
179         PINCTRL_PIN(1, "gp01"),
180         PINCTRL_PIN(2, "gp02"),
181         PINCTRL_PIN(3, "gp03"),
182         PINCTRL_PIN(4, "gp04"),
183         PINCTRL_PIN(5, "gp05"),
184         PINCTRL_PIN(6, "gp06"),
185         PINCTRL_PIN(7, "gp07"),
186
187         PINCTRL_PIN(8, "gp10"),
188         PINCTRL_PIN(9, "gp11"),
189         PINCTRL_PIN(10, "gp12"),
190         PINCTRL_PIN(11, "gp13"),
191         PINCTRL_PIN(12, "gp14"),
192         PINCTRL_PIN(13, "gp15"),
193         PINCTRL_PIN(14, "gp16"),
194         PINCTRL_PIN(15, "gp17"),
195
196         PINCTRL_PIN(16, "gp20"),
197         PINCTRL_PIN(17, "gp21"),
198         PINCTRL_PIN(18, "gp22"),
199         PINCTRL_PIN(19, "gp23"),
200
201         PINCTRL_PIN(20, "gp30"),
202         PINCTRL_PIN(21, "gp31"),
203         PINCTRL_PIN(22, "gp32"),
204         PINCTRL_PIN(23, "gp33"),
205         PINCTRL_PIN(24, "gp34"),
206         PINCTRL_PIN(25, "gp35"),
207         PINCTRL_PIN(26, "gp36"),
208         PINCTRL_PIN(27, "gp37"),
209
210         PINCTRL_PIN(28, "gp40"),
211         PINCTRL_PIN(29, "gp41"),
212         PINCTRL_PIN(30, "gp42"),
213         PINCTRL_PIN(31, "gp43"),
214         PINCTRL_PIN(32, "gp44"),
215         PINCTRL_PIN(33, "gp45"),
216         PINCTRL_PIN(34, "gp46"),
217         PINCTRL_PIN(35, "gp47"),
218
219         PINCTRL_PIN(36, "gp50"),
220         PINCTRL_PIN(37, "gp51"),
221         PINCTRL_PIN(38, "gp52"),
222         PINCTRL_PIN(39, "gp53"),
223         PINCTRL_PIN(40, "gp54"),
224         PINCTRL_PIN(41, "gp55"),
225         PINCTRL_PIN(42, "gp56"),
226         PINCTRL_PIN(43, "gp57"),
227
228         PINCTRL_PIN(44, "gp60"),
229         PINCTRL_PIN(45, "gp61"),
230         PINCTRL_PIN(46, "gp62"),
231         PINCTRL_PIN(47, "gp63"),
232         PINCTRL_PIN(48, "gp64"),
233         PINCTRL_PIN(49, "gp65"),
234         PINCTRL_PIN(50, "gp66"),
235         PINCTRL_PIN(51, "gp67"),
236
237         PINCTRL_PIN(52, "gp70"),
238         PINCTRL_PIN(53, "gp71"),
239         PINCTRL_PIN(54, "gp72"),
240         PINCTRL_PIN(55, "gp73"),
241         PINCTRL_PIN(56, "gp74"),
242         PINCTRL_PIN(57, "gp75"),
243         PINCTRL_PIN(58, "gp76"),
244         PINCTRL_PIN(59, "gp77"),
245 };
246
247 static const char * const cy8c95x0_groups[] = {
248         "gp00",
249         "gp01",
250         "gp02",
251         "gp03",
252         "gp04",
253         "gp05",
254         "gp06",
255         "gp07",
256
257         "gp10",
258         "gp11",
259         "gp12",
260         "gp13",
261         "gp14",
262         "gp15",
263         "gp16",
264         "gp17",
265
266         "gp20",
267         "gp21",
268         "gp22",
269         "gp23",
270
271         "gp30",
272         "gp31",
273         "gp32",
274         "gp33",
275         "gp34",
276         "gp35",
277         "gp36",
278         "gp37",
279
280         "gp40",
281         "gp41",
282         "gp42",
283         "gp43",
284         "gp44",
285         "gp45",
286         "gp46",
287         "gp47",
288
289         "gp50",
290         "gp51",
291         "gp52",
292         "gp53",
293         "gp54",
294         "gp55",
295         "gp56",
296         "gp57",
297
298         "gp60",
299         "gp61",
300         "gp62",
301         "gp63",
302         "gp64",
303         "gp65",
304         "gp66",
305         "gp67",
306
307         "gp70",
308         "gp71",
309         "gp72",
310         "gp73",
311         "gp74",
312         "gp75",
313         "gp76",
314         "gp77",
315 };
316
317 static int cy8c95x0_pinmux_direction(struct cy8c95x0_pinctrl *chip,
318                                      unsigned int pin, bool input);
319
320 static inline u8 cypress_get_port(struct cy8c95x0_pinctrl *chip, unsigned int pin)
321 {
322         /* Account for GPORT2 which only has 4 bits */
323         return CY8C95X0_PIN_TO_OFFSET(pin) / BANK_SZ;
324 }
325
326 static int cypress_get_pin_mask(struct cy8c95x0_pinctrl *chip, unsigned int pin)
327 {
328         /* Account for GPORT2 which only has 4 bits */
329         return BIT(CY8C95X0_PIN_TO_OFFSET(pin) % BANK_SZ);
330 }
331
332 static bool cy8c95x0_readable_register(struct device *dev, unsigned int reg)
333 {
334         switch (reg) {
335         case 0x24 ... 0x27:
336                 return false;
337         default:
338                 return true;
339         }
340 }
341
342 static bool cy8c95x0_writeable_register(struct device *dev, unsigned int reg)
343 {
344         switch (reg) {
345         case CY8C95X0_INPUT_(0) ... CY8C95X0_INPUT_(7):
346                 return false;
347         case CY8C95X0_DEVID:
348                 return false;
349         case 0x24 ... 0x27:
350                 return false;
351         default:
352                 return true;
353         }
354 }
355
356 static bool cy8c95x0_volatile_register(struct device *dev, unsigned int reg)
357 {
358         switch (reg) {
359         case CY8C95X0_INPUT_(0) ... CY8C95X0_INPUT_(7):
360         case CY8C95X0_INTSTATUS_(0) ... CY8C95X0_INTSTATUS_(7):
361         case CY8C95X0_INTMASK:
362         case CY8C95X0_INVERT:
363         case CY8C95X0_PWMSEL:
364         case CY8C95X0_DIRECTION:
365         case CY8C95X0_DRV_PU:
366         case CY8C95X0_DRV_PD:
367         case CY8C95X0_DRV_ODH:
368         case CY8C95X0_DRV_ODL:
369         case CY8C95X0_DRV_PP_FAST:
370         case CY8C95X0_DRV_PP_SLOW:
371         case CY8C95X0_DRV_HIZ:
372                 return true;
373         default:
374                 return false;
375         }
376 }
377
378 static bool cy8c95x0_precious_register(struct device *dev, unsigned int reg)
379 {
380         switch (reg) {
381         case CY8C95X0_INTSTATUS_(0) ... CY8C95X0_INTSTATUS_(7):
382                 return true;
383         default:
384                 return false;
385         }
386 }
387
388 static bool cy8c95x0_muxed_register(unsigned int reg)
389 {
390         switch (reg) {
391         case CY8C95X0_INTMASK:
392         case CY8C95X0_PWMSEL:
393         case CY8C95X0_INVERT:
394         case CY8C95X0_DIRECTION:
395         case CY8C95X0_DRV_PU:
396         case CY8C95X0_DRV_PD:
397         case CY8C95X0_DRV_ODH:
398         case CY8C95X0_DRV_ODL:
399         case CY8C95X0_DRV_PP_FAST:
400         case CY8C95X0_DRV_PP_SLOW:
401         case CY8C95X0_DRV_HIZ:
402                 return true;
403         default:
404                 return false;
405         }
406 }
407
408 static bool cy8c95x0_wc_register(unsigned int reg)
409 {
410         switch (reg) {
411         case CY8C95X0_DRV_PU:
412         case CY8C95X0_DRV_PD:
413         case CY8C95X0_DRV_ODH:
414         case CY8C95X0_DRV_ODL:
415         case CY8C95X0_DRV_PP_FAST:
416         case CY8C95X0_DRV_PP_SLOW:
417         case CY8C95X0_DRV_HIZ:
418                 return true;
419         default:
420                 return false;
421         }
422 }
423
424 static bool cy8c95x0_quick_path_register(unsigned int reg)
425 {
426         switch (reg) {
427         case CY8C95X0_INPUT_(0) ... CY8C95X0_INPUT_(7):
428         case CY8C95X0_INTSTATUS_(0) ... CY8C95X0_INTSTATUS_(7):
429         case CY8C95X0_OUTPUT_(0) ... CY8C95X0_OUTPUT_(7):
430                 return true;
431         default:
432                 return false;
433         }
434 }
435
436 static const struct reg_default cy8c95x0_reg_defaults[] = {
437         { CY8C95X0_OUTPUT_(0), GENMASK(7, 0) },
438         { CY8C95X0_OUTPUT_(1), GENMASK(7, 0) },
439         { CY8C95X0_OUTPUT_(2), GENMASK(7, 0) },
440         { CY8C95X0_OUTPUT_(3), GENMASK(7, 0) },
441         { CY8C95X0_OUTPUT_(4), GENMASK(7, 0) },
442         { CY8C95X0_OUTPUT_(5), GENMASK(7, 0) },
443         { CY8C95X0_OUTPUT_(6), GENMASK(7, 0) },
444         { CY8C95X0_OUTPUT_(7), GENMASK(7, 0) },
445         { CY8C95X0_PORTSEL, 0 },
446         { CY8C95X0_PWMSEL, 0 },
447 };
448
449 static int
450 cy8c95x0_mux_reg_read(void *context, unsigned int off, unsigned int *val)
451 {
452         struct cy8c95x0_pinctrl *chip = context;
453         u8 port = CY8C95X0_MUX_REGMAP_TO_PORT(off);
454         int ret, reg = CY8C95X0_MUX_REGMAP_TO_REG(off);
455
456         mutex_lock(&chip->i2c_lock);
457         /* Select the correct bank */
458         ret = regmap_write(chip->regmap, CY8C95X0_PORTSEL, port);
459         if (ret < 0)
460                 goto out;
461
462         /*
463          * Read the register through direct access regmap. The target range
464          * is marked volatile.
465          */
466         ret = regmap_read(chip->regmap, reg, val);
467 out:
468         mutex_unlock(&chip->i2c_lock);
469
470         return ret;
471 }
472
473 static int
474 cy8c95x0_mux_reg_write(void *context, unsigned int off, unsigned int val)
475 {
476         struct cy8c95x0_pinctrl *chip = context;
477         u8 port = CY8C95X0_MUX_REGMAP_TO_PORT(off);
478         int ret, reg = CY8C95X0_MUX_REGMAP_TO_REG(off);
479
480         mutex_lock(&chip->i2c_lock);
481         /* Select the correct bank */
482         ret = regmap_write(chip->regmap, CY8C95X0_PORTSEL, port);
483         if (ret < 0)
484                 goto out;
485
486         /*
487          * Write the register through direct access regmap. The target range
488          * is marked volatile.
489          */
490         ret = regmap_write(chip->regmap, reg, val);
491 out:
492         mutex_unlock(&chip->i2c_lock);
493
494         return ret;
495 }
496
497 static bool cy8c95x0_mux_accessible_register(struct device *dev, unsigned int off)
498 {
499         struct i2c_client *i2c = to_i2c_client(dev);
500         struct cy8c95x0_pinctrl *chip = i2c_get_clientdata(i2c);
501         u8 port = CY8C95X0_MUX_REGMAP_TO_PORT(off);
502         u8 reg = CY8C95X0_MUX_REGMAP_TO_REG(off);
503
504         if (port >= chip->nport)
505                 return false;
506
507         return cy8c95x0_muxed_register(reg);
508 }
509
510 static struct regmap_bus cy8c95x0_regmap_bus = {
511         .reg_read = cy8c95x0_mux_reg_read,
512         .reg_write = cy8c95x0_mux_reg_write,
513 };
514
515 /* Regmap for muxed registers CY8C95X0_INTMASK - CY8C95X0_DRV_HIZ */
516 static const struct regmap_config cy8c95x0_muxed_regmap = {
517         .name = "muxed",
518         .reg_bits = 8,
519         .val_bits = 8,
520         .cache_type = REGCACHE_FLAT,
521         .use_single_read = true,
522         .use_single_write = true,
523         .max_register = MUXED_STRIDE * BANK_SZ,
524         .num_reg_defaults_raw = MUXED_STRIDE * BANK_SZ,
525         .readable_reg = cy8c95x0_mux_accessible_register,
526         .writeable_reg = cy8c95x0_mux_accessible_register,
527 };
528
529 /* Direct access regmap */
530 static const struct regmap_config cy8c95x0_i2c_regmap = {
531         .name = "direct",
532         .reg_bits = 8,
533         .val_bits = 8,
534
535         .reg_defaults = cy8c95x0_reg_defaults,
536         .num_reg_defaults = ARRAY_SIZE(cy8c95x0_reg_defaults),
537
538         .readable_reg = cy8c95x0_readable_register,
539         .writeable_reg = cy8c95x0_writeable_register,
540         .volatile_reg = cy8c95x0_volatile_register,
541         .precious_reg = cy8c95x0_precious_register,
542
543         .cache_type = REGCACHE_FLAT,
544         .max_register = CY8C95X0_COMMAND,
545 };
546
547 static inline int cy8c95x0_regmap_update_bits_base(struct cy8c95x0_pinctrl *chip,
548                                                    unsigned int reg,
549                                                    unsigned int port,
550                                                    unsigned int mask,
551                                                    unsigned int val,
552                                                    bool *change, bool async,
553                                                    bool force)
554 {
555         struct regmap *regmap;
556         int ret, off, i, read_val;
557
558         /* Caller should never modify PORTSEL directly */
559         if (reg == CY8C95X0_PORTSEL)
560                 return -EINVAL;
561
562         /* Registers behind the PORTSEL mux have their own regmap */
563         if (cy8c95x0_muxed_register(reg)) {
564                 regmap = chip->muxed_regmap;
565                 off = CY8C95X0_MUX_REGMAP_TO_OFFSET(reg, port);
566         } else {
567                 regmap = chip->regmap;
568                 /* Quick path direct access registers honor the port argument */
569                 if (cy8c95x0_quick_path_register(reg))
570                         off = reg + port;
571                 else
572                         off = reg;
573         }
574
575         ret = regmap_update_bits_base(regmap, off, mask, val, change, async, force);
576         if (ret < 0)
577                 return ret;
578
579         /* Update the cache when a WC bit is written */
580         if (cy8c95x0_wc_register(reg) && (mask & val)) {
581                 for (i = CY8C95X0_DRV_PU; i <= CY8C95X0_DRV_HIZ; i++) {
582                         if (i == reg)
583                                 continue;
584                         off = CY8C95X0_MUX_REGMAP_TO_OFFSET(i, port);
585
586                         ret = regmap_read(regmap, off, &read_val);
587                         if (ret < 0)
588                                 continue;
589
590                         if (!(read_val & mask & val))
591                                 continue;
592
593                         regcache_cache_only(regmap, true);
594                         regmap_update_bits(regmap, off, mask & val, 0);
595                         regcache_cache_only(regmap, false);
596                 }
597         }
598
599         return ret;
600 }
601
602 /**
603  * cy8c95x0_regmap_write_bits() - writes a register using the regmap cache
604  * @chip: The pinctrl to work on
605  * @reg: The register to write to. Can be direct access or muxed register.
606  *       MUST NOT be the PORTSEL register.
607  * @port: The port to be used for muxed registers or quick path direct access
608  *        registers. Otherwise unused.
609  * @mask: Bitmask to change
610  * @val: New value for bitmask
611  *
612  * This function handles the register writes to the direct access registers and
613  * the muxed registers while caching all register accesses, internally handling
614  * the correct state of the PORTSEL register and protecting the access to muxed
615  * registers.
616  * The caller must only use this function to change registers behind the PORTSEL mux.
617  *
618  * Return: 0 for successful request, else a corresponding error value
619  */
620 static int cy8c95x0_regmap_write_bits(struct cy8c95x0_pinctrl *chip, unsigned int reg,
621                                       unsigned int port, unsigned int mask, unsigned int val)
622 {
623         return cy8c95x0_regmap_update_bits_base(chip, reg, port, mask, val, NULL, false, true);
624 }
625
626 /**
627  * cy8c95x0_regmap_update_bits() - updates a register using the regmap cache
628  * @chip: The pinctrl to work on
629  * @reg: The register to write to. Can be direct access or muxed register.
630  *       MUST NOT be the PORTSEL register.
631  * @port: The port to be used for muxed registers or quick path direct access
632  *        registers. Otherwise unused.
633  * @mask: Bitmask to change
634  * @val: New value for bitmask
635  *
636  * This function handles the register updates to the direct access registers and
637  * the muxed registers while caching all register accesses, internally handling
638  * the correct state of the PORTSEL register and protecting the access to muxed
639  * registers.
640  * The caller must only use this function to change registers behind the PORTSEL mux.
641  *
642  * Return: 0 for successful request, else a corresponding error value
643  */
644 static int cy8c95x0_regmap_update_bits(struct cy8c95x0_pinctrl *chip, unsigned int reg,
645                                        unsigned int port, unsigned int mask, unsigned int val)
646 {
647         return cy8c95x0_regmap_update_bits_base(chip, reg, port, mask, val, NULL, false, false);
648 }
649
650 /**
651  * cy8c95x0_regmap_read() - reads a register using the regmap cache
652  * @chip: The pinctrl to work on
653  * @reg: The register to read from. Can be direct access or muxed register.
654  * @port: The port to be used for muxed registers or quick path direct access
655  *        registers. Otherwise unused.
656  * @read_val: Value read from hardware or cache
657  *
658  * This function handles the register reads from the direct access registers and
659  * the muxed registers while caching all register accesses, internally handling
660  * the correct state of the PORTSEL register and protecting the access to muxed
661  * registers.
662  * The caller must only use this function to read registers behind the PORTSEL mux.
663  *
664  * Return: 0 for successful request, else a corresponding error value
665  */
666 static int cy8c95x0_regmap_read(struct cy8c95x0_pinctrl *chip, unsigned int reg,
667                                 unsigned int port, unsigned int *read_val)
668 {
669         struct regmap *regmap;
670         int off;
671
672         /* Registers behind the PORTSEL mux have their own regmap */
673         if (cy8c95x0_muxed_register(reg)) {
674                 regmap = chip->muxed_regmap;
675                 off = CY8C95X0_MUX_REGMAP_TO_OFFSET(reg, port);
676         } else {
677                 regmap = chip->regmap;
678                 /* Quick path direct access registers honor the port argument */
679                 if (cy8c95x0_quick_path_register(reg))
680                         off = reg + port;
681                 else
682                         off = reg;
683         }
684
685         return regmap_read(regmap, off, read_val);
686 }
687
688 static int cy8c95x0_write_regs_mask(struct cy8c95x0_pinctrl *chip, int reg,
689                                     unsigned long *val, unsigned long *mask)
690 {
691         DECLARE_BITMAP(tmask, MAX_LINE);
692         DECLARE_BITMAP(tval, MAX_LINE);
693         int write_val;
694         int ret = 0;
695         int i;
696         u8 bits;
697
698         /* Add the 4 bit gap of Gport2 */
699         bitmap_andnot(tmask, mask, chip->shiftmask, MAX_LINE);
700         bitmap_shift_left(tmask, tmask, 4, MAX_LINE);
701         bitmap_replace(tmask, tmask, mask, chip->shiftmask, BANK_SZ * 3);
702
703         bitmap_andnot(tval, val, chip->shiftmask, MAX_LINE);
704         bitmap_shift_left(tval, tval, 4, MAX_LINE);
705         bitmap_replace(tval, tval, val, chip->shiftmask, BANK_SZ * 3);
706
707         for (i = 0; i < chip->nport; i++) {
708                 /* Skip over unused banks */
709                 bits = bitmap_get_value8(tmask, i * BANK_SZ);
710                 if (!bits)
711                         continue;
712
713                 write_val = bitmap_get_value8(tval, i * BANK_SZ);
714
715                 ret = cy8c95x0_regmap_update_bits(chip, reg, i, bits, write_val);
716                 if (ret < 0)
717                         goto out;
718         }
719 out:
720
721         if (ret < 0)
722                 dev_err(chip->dev, "failed writing register %d, port %d: err %d\n", reg, i, ret);
723
724         return ret;
725 }
726
727 static int cy8c95x0_read_regs_mask(struct cy8c95x0_pinctrl *chip, int reg,
728                                    unsigned long *val, unsigned long *mask)
729 {
730         DECLARE_BITMAP(tmask, MAX_LINE);
731         DECLARE_BITMAP(tval, MAX_LINE);
732         DECLARE_BITMAP(tmp, MAX_LINE);
733         int read_val;
734         int ret = 0;
735         int i;
736         u8 bits;
737
738         /* Add the 4 bit gap of Gport2 */
739         bitmap_andnot(tmask, mask, chip->shiftmask, MAX_LINE);
740         bitmap_shift_left(tmask, tmask, 4, MAX_LINE);
741         bitmap_replace(tmask, tmask, mask, chip->shiftmask, BANK_SZ * 3);
742
743         bitmap_andnot(tval, val, chip->shiftmask, MAX_LINE);
744         bitmap_shift_left(tval, tval, 4, MAX_LINE);
745         bitmap_replace(tval, tval, val, chip->shiftmask, BANK_SZ * 3);
746
747         for (i = 0; i < chip->nport; i++) {
748                 /* Skip over unused banks */
749                 bits = bitmap_get_value8(tmask, i * BANK_SZ);
750                 if (!bits)
751                         continue;
752
753                 ret = cy8c95x0_regmap_read(chip, reg, i, &read_val);
754                 if (ret < 0)
755                         goto out;
756
757                 read_val &= bits;
758                 read_val |= bitmap_get_value8(tval, i * BANK_SZ) & ~bits;
759                 bitmap_set_value8(tval, read_val, i * BANK_SZ);
760         }
761
762         /* Fill the 4 bit gap of Gport2 */
763         bitmap_shift_right(tmp, tval, 4, MAX_LINE);
764         bitmap_replace(val, tmp, tval, chip->shiftmask, MAX_LINE);
765
766 out:
767         if (ret < 0)
768                 dev_err(chip->dev, "failed reading register %d, port %d: err %d\n", reg, i, ret);
769
770         return ret;
771 }
772
773 static int cy8c95x0_gpio_direction_input(struct gpio_chip *gc, unsigned int off)
774 {
775         return pinctrl_gpio_direction_input(gc, off);
776 }
777
778 static int cy8c95x0_gpio_direction_output(struct gpio_chip *gc,
779                                           unsigned int off, int val)
780 {
781         struct cy8c95x0_pinctrl *chip = gpiochip_get_data(gc);
782         u8 port = cypress_get_port(chip, off);
783         u8 bit = cypress_get_pin_mask(chip, off);
784         int ret;
785
786         /* Set output level */
787         ret = cy8c95x0_regmap_write_bits(chip, CY8C95X0_OUTPUT, port, bit, val ? bit : 0);
788         if (ret)
789                 return ret;
790
791         return pinctrl_gpio_direction_output(gc, off);
792 }
793
794 static int cy8c95x0_gpio_get_value(struct gpio_chip *gc, unsigned int off)
795 {
796         struct cy8c95x0_pinctrl *chip = gpiochip_get_data(gc);
797         u8 port = cypress_get_port(chip, off);
798         u8 bit = cypress_get_pin_mask(chip, off);
799         u32 reg_val;
800         int ret;
801
802         ret = cy8c95x0_regmap_read(chip, CY8C95X0_INPUT, port, &reg_val);
803         if (ret < 0) {
804                 /*
805                  * NOTE:
806                  * Diagnostic already emitted; that's all we should
807                  * do unless gpio_*_value_cansleep() calls become different
808                  * from their nonsleeping siblings (and report faults).
809                  */
810                 return 0;
811         }
812
813         return !!(reg_val & bit);
814 }
815
816 static void cy8c95x0_gpio_set_value(struct gpio_chip *gc, unsigned int off,
817                                     int val)
818 {
819         struct cy8c95x0_pinctrl *chip = gpiochip_get_data(gc);
820         u8 port = cypress_get_port(chip, off);
821         u8 bit = cypress_get_pin_mask(chip, off);
822
823         cy8c95x0_regmap_write_bits(chip, CY8C95X0_OUTPUT, port, bit, val ? bit : 0);
824 }
825
826 static int cy8c95x0_gpio_get_direction(struct gpio_chip *gc, unsigned int off)
827 {
828         struct cy8c95x0_pinctrl *chip = gpiochip_get_data(gc);
829         u8 port = cypress_get_port(chip, off);
830         u8 bit = cypress_get_pin_mask(chip, off);
831         u32 reg_val;
832         int ret;
833
834         ret = cy8c95x0_regmap_read(chip, CY8C95X0_DIRECTION, port, &reg_val);
835         if (ret < 0)
836                 goto out;
837
838         if (reg_val & bit)
839                 return GPIO_LINE_DIRECTION_IN;
840
841         return GPIO_LINE_DIRECTION_OUT;
842 out:
843         return ret;
844 }
845
846 static int cy8c95x0_gpio_get_pincfg(struct cy8c95x0_pinctrl *chip,
847                                     unsigned int off,
848                                     unsigned long *config)
849 {
850         enum pin_config_param param = pinconf_to_config_param(*config);
851         u8 port = cypress_get_port(chip, off);
852         u8 bit = cypress_get_pin_mask(chip, off);
853         unsigned int reg;
854         u32 reg_val;
855         u16 arg = 0;
856         int ret;
857
858         switch (param) {
859         case PIN_CONFIG_BIAS_PULL_UP:
860                 reg = CY8C95X0_DRV_PU;
861                 break;
862         case PIN_CONFIG_BIAS_PULL_DOWN:
863                 reg = CY8C95X0_DRV_PD;
864                 break;
865         case PIN_CONFIG_BIAS_DISABLE:
866                 reg = CY8C95X0_DRV_HIZ;
867                 break;
868         case PIN_CONFIG_DRIVE_OPEN_DRAIN:
869                 reg = CY8C95X0_DRV_ODL;
870                 break;
871         case PIN_CONFIG_DRIVE_OPEN_SOURCE:
872                 reg = CY8C95X0_DRV_ODH;
873                 break;
874         case PIN_CONFIG_DRIVE_PUSH_PULL:
875                 reg = CY8C95X0_DRV_PP_FAST;
876                 break;
877         case PIN_CONFIG_INPUT_ENABLE:
878                 reg = CY8C95X0_DIRECTION;
879                 break;
880         case PIN_CONFIG_MODE_PWM:
881                 reg = CY8C95X0_PWMSEL;
882                 break;
883         case PIN_CONFIG_OUTPUT:
884                 reg = CY8C95X0_OUTPUT;
885                 break;
886         case PIN_CONFIG_OUTPUT_ENABLE:
887                 reg = CY8C95X0_DIRECTION;
888                 break;
889
890         case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
891         case PIN_CONFIG_BIAS_BUS_HOLD:
892         case PIN_CONFIG_BIAS_PULL_PIN_DEFAULT:
893         case PIN_CONFIG_DRIVE_STRENGTH:
894         case PIN_CONFIG_DRIVE_STRENGTH_UA:
895         case PIN_CONFIG_INPUT_DEBOUNCE:
896         case PIN_CONFIG_INPUT_SCHMITT:
897         case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
898         case PIN_CONFIG_MODE_LOW_POWER:
899         case PIN_CONFIG_PERSIST_STATE:
900         case PIN_CONFIG_POWER_SOURCE:
901         case PIN_CONFIG_SKEW_DELAY:
902         case PIN_CONFIG_SLEEP_HARDWARE_STATE:
903         case PIN_CONFIG_SLEW_RATE:
904         default:
905                 ret = -ENOTSUPP;
906                 goto out;
907         }
908         /*
909          * Writing 1 to one of the drive mode registers will automatically
910          * clear conflicting set bits in the other drive mode registers.
911          */
912         ret = cy8c95x0_regmap_read(chip, reg, port, &reg_val);
913         if (ret < 0)
914                 goto out;
915
916         if (reg_val & bit)
917                 arg = 1;
918         if (param == PIN_CONFIG_OUTPUT_ENABLE)
919                 arg = !arg;
920
921         *config = pinconf_to_config_packed(param, (u16)arg);
922 out:
923         return ret;
924 }
925
926 static int cy8c95x0_gpio_set_pincfg(struct cy8c95x0_pinctrl *chip,
927                                     unsigned int off,
928                                     unsigned long config)
929 {
930         u8 port = cypress_get_port(chip, off);
931         u8 bit = cypress_get_pin_mask(chip, off);
932         unsigned long param = pinconf_to_config_param(config);
933         unsigned long arg = pinconf_to_config_argument(config);
934         unsigned int reg;
935         int ret;
936
937         switch (param) {
938         case PIN_CONFIG_BIAS_PULL_UP:
939                 __clear_bit(off, chip->push_pull);
940                 reg = CY8C95X0_DRV_PU;
941                 break;
942         case PIN_CONFIG_BIAS_PULL_DOWN:
943                 __clear_bit(off, chip->push_pull);
944                 reg = CY8C95X0_DRV_PD;
945                 break;
946         case PIN_CONFIG_BIAS_DISABLE:
947                 __clear_bit(off, chip->push_pull);
948                 reg = CY8C95X0_DRV_HIZ;
949                 break;
950         case PIN_CONFIG_DRIVE_OPEN_DRAIN:
951                 __clear_bit(off, chip->push_pull);
952                 reg = CY8C95X0_DRV_ODL;
953                 break;
954         case PIN_CONFIG_DRIVE_OPEN_SOURCE:
955                 __clear_bit(off, chip->push_pull);
956                 reg = CY8C95X0_DRV_ODH;
957                 break;
958         case PIN_CONFIG_DRIVE_PUSH_PULL:
959                 __set_bit(off, chip->push_pull);
960                 reg = CY8C95X0_DRV_PP_FAST;
961                 break;
962         case PIN_CONFIG_MODE_PWM:
963                 reg = CY8C95X0_PWMSEL;
964                 break;
965         case PIN_CONFIG_OUTPUT_ENABLE:
966                 ret = cy8c95x0_pinmux_direction(chip, off, !arg);
967                 goto out;
968         case PIN_CONFIG_INPUT_ENABLE:
969                 ret = cy8c95x0_pinmux_direction(chip, off, arg);
970                 goto out;
971         default:
972                 ret = -ENOTSUPP;
973                 goto out;
974         }
975         /*
976          * Writing 1 to one of the drive mode registers will automatically
977          * clear conflicting set bits in the other drive mode registers.
978          */
979         ret = cy8c95x0_regmap_write_bits(chip, reg, port, bit, bit);
980 out:
981         return ret;
982 }
983
984 static int cy8c95x0_gpio_get_multiple(struct gpio_chip *gc,
985                                       unsigned long *mask, unsigned long *bits)
986 {
987         struct cy8c95x0_pinctrl *chip = gpiochip_get_data(gc);
988
989         return cy8c95x0_read_regs_mask(chip, CY8C95X0_INPUT, bits, mask);
990 }
991
992 static void cy8c95x0_gpio_set_multiple(struct gpio_chip *gc,
993                                        unsigned long *mask, unsigned long *bits)
994 {
995         struct cy8c95x0_pinctrl *chip = gpiochip_get_data(gc);
996
997         cy8c95x0_write_regs_mask(chip, CY8C95X0_OUTPUT, bits, mask);
998 }
999
1000 static int cy8c95x0_add_pin_ranges(struct gpio_chip *gc)
1001 {
1002         struct cy8c95x0_pinctrl *chip = gpiochip_get_data(gc);
1003         struct device *dev = chip->dev;
1004         int ret;
1005
1006         ret = gpiochip_add_pin_range(gc, dev_name(dev), 0, 0, chip->tpin);
1007         if (ret)
1008                 dev_err(dev, "failed to add GPIO pin range\n");
1009
1010         return ret;
1011 }
1012
1013 static int cy8c95x0_setup_gpiochip(struct cy8c95x0_pinctrl *chip)
1014 {
1015         struct gpio_chip *gc = &chip->gpio_chip;
1016
1017         gc->request = gpiochip_generic_request;
1018         gc->free = gpiochip_generic_free;
1019         gc->direction_input  = cy8c95x0_gpio_direction_input;
1020         gc->direction_output = cy8c95x0_gpio_direction_output;
1021         gc->get = cy8c95x0_gpio_get_value;
1022         gc->set = cy8c95x0_gpio_set_value;
1023         gc->get_direction = cy8c95x0_gpio_get_direction;
1024         gc->get_multiple = cy8c95x0_gpio_get_multiple;
1025         gc->set_multiple = cy8c95x0_gpio_set_multiple;
1026         gc->set_config = gpiochip_generic_config;
1027         gc->can_sleep = true;
1028         gc->add_pin_ranges = cy8c95x0_add_pin_ranges;
1029
1030         gc->base = -1;
1031         gc->ngpio = chip->tpin;
1032
1033         gc->parent = chip->dev;
1034         gc->owner = THIS_MODULE;
1035         gc->names = NULL;
1036
1037         gc->label = dev_name(chip->dev);
1038
1039         return devm_gpiochip_add_data(chip->dev, gc, chip);
1040 }
1041
1042 static void cy8c95x0_irq_mask(struct irq_data *d)
1043 {
1044         struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1045         struct cy8c95x0_pinctrl *chip = gpiochip_get_data(gc);
1046         irq_hw_number_t hwirq = irqd_to_hwirq(d);
1047
1048         set_bit(hwirq, chip->irq_mask);
1049         gpiochip_disable_irq(gc, hwirq);
1050 }
1051
1052 static void cy8c95x0_irq_unmask(struct irq_data *d)
1053 {
1054         struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1055         struct cy8c95x0_pinctrl *chip = gpiochip_get_data(gc);
1056         irq_hw_number_t hwirq = irqd_to_hwirq(d);
1057
1058         gpiochip_enable_irq(gc, hwirq);
1059         clear_bit(hwirq, chip->irq_mask);
1060 }
1061
1062 static void cy8c95x0_irq_bus_lock(struct irq_data *d)
1063 {
1064         struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1065         struct cy8c95x0_pinctrl *chip = gpiochip_get_data(gc);
1066
1067         mutex_lock(&chip->irq_lock);
1068 }
1069
1070 static void cy8c95x0_irq_bus_sync_unlock(struct irq_data *d)
1071 {
1072         struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1073         struct cy8c95x0_pinctrl *chip = gpiochip_get_data(gc);
1074         DECLARE_BITMAP(ones, MAX_LINE);
1075         DECLARE_BITMAP(irq_mask, MAX_LINE);
1076         DECLARE_BITMAP(reg_direction, MAX_LINE);
1077
1078         bitmap_fill(ones, MAX_LINE);
1079
1080         cy8c95x0_write_regs_mask(chip, CY8C95X0_INTMASK, chip->irq_mask, ones);
1081
1082         /* Switch direction to input if needed */
1083         cy8c95x0_read_regs_mask(chip, CY8C95X0_DIRECTION, reg_direction, chip->irq_mask);
1084         bitmap_or(irq_mask, chip->irq_mask, reg_direction, MAX_LINE);
1085         bitmap_complement(irq_mask, irq_mask, MAX_LINE);
1086
1087         /* Look for any newly setup interrupt */
1088         cy8c95x0_write_regs_mask(chip, CY8C95X0_DIRECTION, ones, irq_mask);
1089
1090         mutex_unlock(&chip->irq_lock);
1091 }
1092
1093 static int cy8c95x0_irq_set_type(struct irq_data *d, unsigned int type)
1094 {
1095         struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1096         struct cy8c95x0_pinctrl *chip = gpiochip_get_data(gc);
1097         irq_hw_number_t hwirq = irqd_to_hwirq(d);
1098         unsigned int trig_type;
1099
1100         switch (type) {
1101         case IRQ_TYPE_EDGE_RISING:
1102         case IRQ_TYPE_EDGE_FALLING:
1103         case IRQ_TYPE_EDGE_BOTH:
1104                 trig_type = type;
1105                 break;
1106         case IRQ_TYPE_LEVEL_HIGH:
1107                 trig_type = IRQ_TYPE_EDGE_RISING;
1108                 break;
1109         case IRQ_TYPE_LEVEL_LOW:
1110                 trig_type = IRQ_TYPE_EDGE_FALLING;
1111                 break;
1112         default:
1113                 dev_err(chip->dev, "irq %d: unsupported type %d\n", d->irq, type);
1114                 return -EINVAL;
1115         }
1116
1117         assign_bit(hwirq, chip->irq_trig_fall, trig_type & IRQ_TYPE_EDGE_FALLING);
1118         assign_bit(hwirq, chip->irq_trig_raise, trig_type & IRQ_TYPE_EDGE_RISING);
1119         assign_bit(hwirq, chip->irq_trig_low, type == IRQ_TYPE_LEVEL_LOW);
1120         assign_bit(hwirq, chip->irq_trig_high, type == IRQ_TYPE_LEVEL_HIGH);
1121
1122         return 0;
1123 }
1124
1125 static void cy8c95x0_irq_shutdown(struct irq_data *d)
1126 {
1127         struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1128         struct cy8c95x0_pinctrl *chip = gpiochip_get_data(gc);
1129         irq_hw_number_t hwirq = irqd_to_hwirq(d);
1130
1131         clear_bit(hwirq, chip->irq_trig_raise);
1132         clear_bit(hwirq, chip->irq_trig_fall);
1133         clear_bit(hwirq, chip->irq_trig_low);
1134         clear_bit(hwirq, chip->irq_trig_high);
1135 }
1136
1137 static const struct irq_chip cy8c95x0_irqchip = {
1138         .name = "cy8c95x0-irq",
1139         .irq_mask = cy8c95x0_irq_mask,
1140         .irq_unmask = cy8c95x0_irq_unmask,
1141         .irq_bus_lock = cy8c95x0_irq_bus_lock,
1142         .irq_bus_sync_unlock = cy8c95x0_irq_bus_sync_unlock,
1143         .irq_set_type = cy8c95x0_irq_set_type,
1144         .irq_shutdown = cy8c95x0_irq_shutdown,
1145         .flags = IRQCHIP_IMMUTABLE,
1146         GPIOCHIP_IRQ_RESOURCE_HELPERS,
1147 };
1148
1149 static bool cy8c95x0_irq_pending(struct cy8c95x0_pinctrl *chip, unsigned long *pending)
1150 {
1151         DECLARE_BITMAP(ones, MAX_LINE);
1152         DECLARE_BITMAP(cur_stat, MAX_LINE);
1153         DECLARE_BITMAP(new_stat, MAX_LINE);
1154         DECLARE_BITMAP(trigger, MAX_LINE);
1155
1156         bitmap_fill(ones, MAX_LINE);
1157
1158         /* Read the current interrupt status from the device */
1159         if (cy8c95x0_read_regs_mask(chip, CY8C95X0_INTSTATUS, trigger, ones))
1160                 return false;
1161
1162         /* Check latched inputs */
1163         if (cy8c95x0_read_regs_mask(chip, CY8C95X0_INPUT, cur_stat, trigger))
1164                 return false;
1165
1166         /* Apply filter for rising/falling edge selection */
1167         bitmap_replace(new_stat, chip->irq_trig_fall, chip->irq_trig_raise,
1168                        cur_stat, MAX_LINE);
1169
1170         bitmap_and(pending, new_stat, trigger, MAX_LINE);
1171
1172         return !bitmap_empty(pending, MAX_LINE);
1173 }
1174
1175 static irqreturn_t cy8c95x0_irq_handler(int irq, void *devid)
1176 {
1177         struct cy8c95x0_pinctrl *chip = devid;
1178         struct gpio_chip *gc = &chip->gpio_chip;
1179         DECLARE_BITMAP(pending, MAX_LINE);
1180         int nested_irq, level;
1181         bool ret;
1182
1183         ret = cy8c95x0_irq_pending(chip, pending);
1184         if (!ret)
1185                 return IRQ_RETVAL(0);
1186
1187         ret = 0;
1188         for_each_set_bit(level, pending, MAX_LINE) {
1189                 /* Already accounted for 4bit gap in GPort2 */
1190                 nested_irq = irq_find_mapping(gc->irq.domain, level);
1191
1192                 if (unlikely(nested_irq <= 0)) {
1193                         dev_warn_ratelimited(gc->parent, "unmapped interrupt %d\n", level);
1194                         continue;
1195                 }
1196
1197                 if (test_bit(level, chip->irq_trig_low))
1198                         while (!cy8c95x0_gpio_get_value(gc, level))
1199                                 handle_nested_irq(nested_irq);
1200                 else if (test_bit(level, chip->irq_trig_high))
1201                         while (cy8c95x0_gpio_get_value(gc, level))
1202                                 handle_nested_irq(nested_irq);
1203                 else
1204                         handle_nested_irq(nested_irq);
1205
1206                 ret = 1;
1207         }
1208
1209         return IRQ_RETVAL(ret);
1210 }
1211
1212 static int cy8c95x0_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
1213 {
1214         struct cy8c95x0_pinctrl *chip = pinctrl_dev_get_drvdata(pctldev);
1215
1216         return chip->tpin;
1217 }
1218
1219 static const char *cy8c95x0_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
1220                                                    unsigned int group)
1221 {
1222         return cy8c95x0_groups[group];
1223 }
1224
1225 static int cy8c95x0_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
1226                                            unsigned int group,
1227                                            const unsigned int **pins,
1228                                            unsigned int *num_pins)
1229 {
1230         *pins = &cy8c9560_pins[group].number;
1231         *num_pins = 1;
1232         return 0;
1233 }
1234
1235 static const char *cy8c95x0_get_fname(unsigned int selector)
1236 {
1237         if (selector == 0)
1238                 return "gpio";
1239         else
1240                 return "pwm";
1241 }
1242
1243 static void cy8c95x0_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
1244                                   unsigned int pin)
1245 {
1246         struct cy8c95x0_pinctrl *chip = pinctrl_dev_get_drvdata(pctldev);
1247         DECLARE_BITMAP(mask, MAX_LINE);
1248         DECLARE_BITMAP(pwm, MAX_LINE);
1249
1250         bitmap_zero(mask, MAX_LINE);
1251         __set_bit(pin, mask);
1252
1253         if (cy8c95x0_read_regs_mask(chip, CY8C95X0_PWMSEL, pwm, mask)) {
1254                 seq_puts(s, "not available");
1255                 return;
1256         }
1257
1258         seq_printf(s, "MODE:%s", cy8c95x0_get_fname(test_bit(pin, pwm)));
1259 }
1260
1261 static const struct pinctrl_ops cy8c95x0_pinctrl_ops = {
1262         .get_groups_count = cy8c95x0_pinctrl_get_groups_count,
1263         .get_group_name = cy8c95x0_pinctrl_get_group_name,
1264         .get_group_pins = cy8c95x0_pinctrl_get_group_pins,
1265 #ifdef CONFIG_OF
1266         .dt_node_to_map = pinconf_generic_dt_node_to_map_pin,
1267         .dt_free_map = pinconf_generic_dt_free_map,
1268 #endif
1269         .pin_dbg_show = cy8c95x0_pin_dbg_show,
1270 };
1271
1272 static const char *cy8c95x0_get_function_name(struct pinctrl_dev *pctldev, unsigned int selector)
1273 {
1274         return cy8c95x0_get_fname(selector);
1275 }
1276
1277 static int cy8c95x0_get_functions_count(struct pinctrl_dev *pctldev)
1278 {
1279         return 2;
1280 }
1281
1282 static int cy8c95x0_get_function_groups(struct pinctrl_dev *pctldev, unsigned int selector,
1283                                         const char * const **groups,
1284                                         unsigned int * const num_groups)
1285 {
1286         struct cy8c95x0_pinctrl *chip = pinctrl_dev_get_drvdata(pctldev);
1287
1288         *groups = cy8c95x0_groups;
1289         *num_groups = chip->tpin;
1290         return 0;
1291 }
1292
1293 static int cy8c95x0_set_mode(struct cy8c95x0_pinctrl *chip, unsigned int off, bool mode)
1294 {
1295         u8 port = cypress_get_port(chip, off);
1296         u8 bit = cypress_get_pin_mask(chip, off);
1297
1298         return cy8c95x0_regmap_write_bits(chip, CY8C95X0_PWMSEL, port, bit, mode ? bit : 0);
1299 }
1300
1301 static int cy8c95x0_pinmux_mode(struct cy8c95x0_pinctrl *chip,
1302                                 unsigned int selector, unsigned int group)
1303 {
1304         u8 port = cypress_get_port(chip, group);
1305         u8 bit = cypress_get_pin_mask(chip, group);
1306         int ret;
1307
1308         ret = cy8c95x0_set_mode(chip, group, selector);
1309         if (ret < 0)
1310                 return ret;
1311
1312         if (selector == 0)
1313                 return 0;
1314
1315         /* Set direction to output & set output to 1 so that PWM can work */
1316         ret = cy8c95x0_regmap_write_bits(chip, CY8C95X0_DIRECTION, port, bit, bit);
1317         if (ret < 0)
1318                 return ret;
1319
1320         return cy8c95x0_regmap_write_bits(chip, CY8C95X0_OUTPUT, port, bit, bit);
1321 }
1322
1323 static int cy8c95x0_set_mux(struct pinctrl_dev *pctldev, unsigned int selector,
1324                             unsigned int group)
1325 {
1326         struct cy8c95x0_pinctrl *chip = pinctrl_dev_get_drvdata(pctldev);
1327
1328         return cy8c95x0_pinmux_mode(chip, selector, group);
1329 }
1330
1331 static int cy8c95x0_gpio_request_enable(struct pinctrl_dev *pctldev,
1332                                         struct pinctrl_gpio_range *range,
1333                                         unsigned int pin)
1334 {
1335         struct cy8c95x0_pinctrl *chip = pinctrl_dev_get_drvdata(pctldev);
1336
1337         return cy8c95x0_set_mode(chip, pin, false);
1338 }
1339
1340 static int cy8c95x0_pinmux_direction(struct cy8c95x0_pinctrl *chip,
1341                                      unsigned int pin, bool input)
1342 {
1343         u8 port = cypress_get_port(chip, pin);
1344         u8 bit = cypress_get_pin_mask(chip, pin);
1345         int ret;
1346
1347         ret = cy8c95x0_regmap_write_bits(chip, CY8C95X0_DIRECTION, port, bit, input ? bit : 0);
1348         if (ret)
1349                 return ret;
1350
1351         /*
1352          * Disable driving the pin by forcing it to HighZ. Only setting
1353          * the direction register isn't sufficient in Push-Pull mode.
1354          */
1355         if (input && test_bit(pin, chip->push_pull)) {
1356                 ret = cy8c95x0_regmap_write_bits(chip, CY8C95X0_DRV_HIZ, port, bit, bit);
1357                 if (ret)
1358                         return ret;
1359
1360                 __clear_bit(pin, chip->push_pull);
1361         }
1362
1363         return 0;
1364 }
1365
1366 static int cy8c95x0_gpio_set_direction(struct pinctrl_dev *pctldev,
1367                                        struct pinctrl_gpio_range *range,
1368                                        unsigned int pin, bool input)
1369 {
1370         struct cy8c95x0_pinctrl *chip = pinctrl_dev_get_drvdata(pctldev);
1371
1372         return cy8c95x0_pinmux_direction(chip, pin, input);
1373 }
1374
1375 static const struct pinmux_ops cy8c95x0_pmxops = {
1376         .get_functions_count = cy8c95x0_get_functions_count,
1377         .get_function_name = cy8c95x0_get_function_name,
1378         .get_function_groups = cy8c95x0_get_function_groups,
1379         .set_mux = cy8c95x0_set_mux,
1380         .gpio_request_enable = cy8c95x0_gpio_request_enable,
1381         .gpio_set_direction = cy8c95x0_gpio_set_direction,
1382         .strict = true,
1383 };
1384
1385 static int cy8c95x0_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin,
1386                                 unsigned long *config)
1387 {
1388         struct cy8c95x0_pinctrl *chip = pinctrl_dev_get_drvdata(pctldev);
1389
1390         return cy8c95x0_gpio_get_pincfg(chip, pin, config);
1391 }
1392
1393 static int cy8c95x0_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
1394                                 unsigned long *configs, unsigned int num_configs)
1395 {
1396         struct cy8c95x0_pinctrl *chip = pinctrl_dev_get_drvdata(pctldev);
1397         int ret = 0;
1398         int i;
1399
1400         for (i = 0; i < num_configs; i++) {
1401                 ret = cy8c95x0_gpio_set_pincfg(chip, pin, configs[i]);
1402                 if (ret)
1403                         return ret;
1404         }
1405
1406         return ret;
1407 }
1408
1409 static const struct pinconf_ops cy8c95x0_pinconf_ops = {
1410         .pin_config_get = cy8c95x0_pinconf_get,
1411         .pin_config_set = cy8c95x0_pinconf_set,
1412         .is_generic = true,
1413 };
1414
1415 static int cy8c95x0_irq_setup(struct cy8c95x0_pinctrl *chip, int irq)
1416 {
1417         struct gpio_irq_chip *girq = &chip->gpio_chip.irq;
1418         DECLARE_BITMAP(pending_irqs, MAX_LINE);
1419         int ret;
1420
1421         mutex_init(&chip->irq_lock);
1422
1423         bitmap_zero(pending_irqs, MAX_LINE);
1424
1425         /* Read IRQ status register to clear all pending interrupts */
1426         ret = cy8c95x0_irq_pending(chip, pending_irqs);
1427         if (ret) {
1428                 dev_err(chip->dev, "failed to clear irq status register\n");
1429                 return ret;
1430         }
1431
1432         /* Mask all interrupts */
1433         bitmap_fill(chip->irq_mask, MAX_LINE);
1434
1435         gpio_irq_chip_set_chip(girq, &cy8c95x0_irqchip);
1436
1437         /* This will let us handle the parent IRQ in the driver */
1438         girq->parent_handler = NULL;
1439         girq->num_parents = 0;
1440         girq->parents = NULL;
1441         girq->default_type = IRQ_TYPE_NONE;
1442         girq->handler = handle_simple_irq;
1443         girq->threaded = true;
1444
1445         ret = devm_request_threaded_irq(chip->dev, irq,
1446                                         NULL, cy8c95x0_irq_handler,
1447                                         IRQF_ONESHOT | IRQF_SHARED | IRQF_TRIGGER_HIGH,
1448                                         dev_name(chip->dev), chip);
1449         if (ret) {
1450                 dev_err(chip->dev, "failed to request irq %d\n", irq);
1451                 return ret;
1452         }
1453         dev_info(chip->dev, "Registered threaded IRQ\n");
1454
1455         return 0;
1456 }
1457
1458 static int cy8c95x0_setup_pinctrl(struct cy8c95x0_pinctrl *chip)
1459 {
1460         struct pinctrl_desc *pd = &chip->pinctrl_desc;
1461
1462         pd->pctlops = &cy8c95x0_pinctrl_ops;
1463         pd->confops = &cy8c95x0_pinconf_ops;
1464         pd->pmxops = &cy8c95x0_pmxops;
1465         pd->name = dev_name(chip->dev);
1466         pd->pins = cy8c9560_pins;
1467         pd->npins = chip->tpin;
1468         pd->owner = THIS_MODULE;
1469
1470         chip->pctldev = devm_pinctrl_register(chip->dev, pd, chip);
1471         if (IS_ERR(chip->pctldev))
1472                 return dev_err_probe(chip->dev, PTR_ERR(chip->pctldev),
1473                         "can't register controller\n");
1474
1475         return 0;
1476 }
1477
1478 static int cy8c95x0_detect(struct i2c_client *client,
1479                            struct i2c_board_info *info)
1480 {
1481         struct i2c_adapter *adapter = client->adapter;
1482         int ret;
1483         const char *name;
1484
1485         if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1486                 return -ENODEV;
1487
1488         ret = i2c_smbus_read_byte_data(client, CY8C95X0_DEVID);
1489         if (ret < 0)
1490                 return ret;
1491         switch (ret & GENMASK(7, 4)) {
1492         case 0x20:
1493                 name = cy8c95x0_id[0].name;
1494                 break;
1495         case 0x40:
1496                 name = cy8c95x0_id[1].name;
1497                 break;
1498         case 0x60:
1499                 name = cy8c95x0_id[2].name;
1500                 break;
1501         default:
1502                 return -ENODEV;
1503         }
1504
1505         dev_info(&client->dev, "Found a %s chip at 0x%02x.\n", name, client->addr);
1506         strscpy(info->type, name, I2C_NAME_SIZE);
1507
1508         return 0;
1509 }
1510
1511 static int cy8c95x0_probe(struct i2c_client *client)
1512 {
1513         struct cy8c95x0_pinctrl *chip;
1514         struct regulator *reg;
1515         int ret;
1516
1517         chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
1518         if (!chip)
1519                 return -ENOMEM;
1520
1521         chip->dev = &client->dev;
1522
1523         /* Set the device type */
1524         chip->driver_data = (uintptr_t)i2c_get_match_data(client);
1525         if (!chip->driver_data)
1526                 return -ENODEV;
1527
1528         i2c_set_clientdata(client, chip);
1529
1530         chip->tpin = chip->driver_data & CY8C95X0_GPIO_MASK;
1531         chip->nport = DIV_ROUND_UP(CY8C95X0_PIN_TO_OFFSET(chip->tpin), BANK_SZ);
1532
1533         switch (chip->tpin) {
1534         case 20:
1535                 strscpy(chip->name, cy8c95x0_id[0].name, I2C_NAME_SIZE);
1536                 break;
1537         case 40:
1538                 strscpy(chip->name, cy8c95x0_id[1].name, I2C_NAME_SIZE);
1539                 break;
1540         case 60:
1541                 strscpy(chip->name, cy8c95x0_id[2].name, I2C_NAME_SIZE);
1542                 break;
1543         default:
1544                 return -ENODEV;
1545         }
1546
1547         reg = devm_regulator_get(&client->dev, "vdd");
1548         if (IS_ERR(reg)) {
1549                 if (PTR_ERR(reg) == -EPROBE_DEFER)
1550                         return -EPROBE_DEFER;
1551         } else {
1552                 ret = regulator_enable(reg);
1553                 if (ret) {
1554                         dev_err(&client->dev, "failed to enable regulator vdd: %d\n", ret);
1555                         return ret;
1556                 }
1557                 chip->regulator = reg;
1558         }
1559
1560         /* bring the chip out of reset if reset pin is provided */
1561         chip->gpio_reset = devm_gpiod_get_optional(&client->dev, "reset", GPIOD_OUT_HIGH);
1562         if (IS_ERR(chip->gpio_reset)) {
1563                 ret = dev_err_probe(chip->dev, PTR_ERR(chip->gpio_reset),
1564                                     "Failed to get GPIO 'reset'\n");
1565                 goto err_exit;
1566         } else if (chip->gpio_reset) {
1567                 usleep_range(1000, 2000);
1568                 gpiod_set_value_cansleep(chip->gpio_reset, 0);
1569                 usleep_range(250000, 300000);
1570
1571                 gpiod_set_consumer_name(chip->gpio_reset, "CY8C95X0 RESET");
1572         }
1573
1574         /* Generic regmap for direct access registers */
1575         chip->regmap = devm_regmap_init_i2c(client, &cy8c95x0_i2c_regmap);
1576         if (IS_ERR(chip->regmap)) {
1577                 ret = PTR_ERR(chip->regmap);
1578                 goto err_exit;
1579         }
1580
1581         /* Port specific regmap behind PORTSEL mux */
1582         chip->muxed_regmap = devm_regmap_init(&client->dev, &cy8c95x0_regmap_bus,
1583                                               chip, &cy8c95x0_muxed_regmap);
1584         if (IS_ERR(chip->muxed_regmap)) {
1585                 ret = dev_err_probe(&client->dev, PTR_ERR(chip->muxed_regmap),
1586                                     "Failed to register muxed regmap\n");
1587                 goto err_exit;
1588         }
1589
1590         bitmap_zero(chip->push_pull, MAX_LINE);
1591         bitmap_zero(chip->shiftmask, MAX_LINE);
1592         bitmap_set(chip->shiftmask, 0, 20);
1593         mutex_init(&chip->i2c_lock);
1594
1595         if (dmi_first_match(cy8c95x0_dmi_acpi_irq_info)) {
1596                 ret = cy8c95x0_acpi_get_irq(&client->dev);
1597                 if (ret > 0)
1598                         client->irq = ret;
1599         }
1600
1601         if (client->irq) {
1602                 ret = cy8c95x0_irq_setup(chip, client->irq);
1603                 if (ret)
1604                         goto err_exit;
1605         }
1606
1607         ret = cy8c95x0_setup_pinctrl(chip);
1608         if (ret)
1609                 goto err_exit;
1610
1611         ret = cy8c95x0_setup_gpiochip(chip);
1612         if (ret)
1613                 goto err_exit;
1614
1615         return 0;
1616
1617 err_exit:
1618         if (!IS_ERR_OR_NULL(chip->regulator))
1619                 regulator_disable(chip->regulator);
1620         return ret;
1621 }
1622
1623 static void cy8c95x0_remove(struct i2c_client *client)
1624 {
1625         struct cy8c95x0_pinctrl *chip = i2c_get_clientdata(client);
1626
1627         if (!IS_ERR_OR_NULL(chip->regulator))
1628                 regulator_disable(chip->regulator);
1629 }
1630
1631 static const struct acpi_device_id cy8c95x0_acpi_ids[] = {
1632         { "INT3490", 40, },
1633         { }
1634 };
1635 MODULE_DEVICE_TABLE(acpi, cy8c95x0_acpi_ids);
1636
1637 static struct i2c_driver cy8c95x0_driver = {
1638         .driver = {
1639                 .name   = "cy8c95x0-pinctrl",
1640                 .of_match_table = cy8c95x0_dt_ids,
1641                 .acpi_match_table = cy8c95x0_acpi_ids,
1642         },
1643         .probe          = cy8c95x0_probe,
1644         .remove         = cy8c95x0_remove,
1645         .id_table       = cy8c95x0_id,
1646         .detect         = cy8c95x0_detect,
1647 };
1648 module_i2c_driver(cy8c95x0_driver);
1649
1650 MODULE_AUTHOR("Patrick Rudolph <patrick.rudolph@9elements.com>");
1651 MODULE_AUTHOR("Naresh Solanki <naresh.solanki@9elements.com>");
1652 MODULE_DESCRIPTION("Pinctrl driver for CY8C95X0");
1653 MODULE_LICENSE("GPL");