0001
0002 #ifndef __LINUX_GPIO_DRIVER_H
0003 #define __LINUX_GPIO_DRIVER_H
0004
0005 #include <linux/device.h>
0006 #include <linux/irq.h>
0007 #include <linux/irqchip/chained_irq.h>
0008 #include <linux/irqdomain.h>
0009 #include <linux/lockdep.h>
0010 #include <linux/pinctrl/pinctrl.h>
0011 #include <linux/pinctrl/pinconf-generic.h>
0012 #include <linux/property.h>
0013 #include <linux/types.h>
0014
0015 #include <asm/msi.h>
0016
0017 struct gpio_desc;
0018 struct of_phandle_args;
0019 struct device_node;
0020 struct seq_file;
0021 struct gpio_device;
0022 struct module;
0023 enum gpiod_flags;
0024 enum gpio_lookup_flags;
0025
0026 struct gpio_chip;
0027
0028 union gpio_irq_fwspec {
0029 struct irq_fwspec fwspec;
0030 #ifdef CONFIG_GENERIC_MSI_IRQ_DOMAIN
0031 msi_alloc_info_t msiinfo;
0032 #endif
0033 };
0034
0035 #define GPIO_LINE_DIRECTION_IN 1
0036 #define GPIO_LINE_DIRECTION_OUT 0
0037
0038
0039
0040
0041 struct gpio_irq_chip {
0042
0043
0044
0045
0046
0047 struct irq_chip *chip;
0048
0049
0050
0051
0052
0053
0054
0055 struct irq_domain *domain;
0056
0057
0058
0059
0060
0061
0062 const struct irq_domain_ops *domain_ops;
0063
0064 #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
0065
0066
0067
0068
0069
0070
0071 struct fwnode_handle *fwnode;
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081 struct irq_domain *parent_domain;
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100 int (*child_to_parent_hwirq)(struct gpio_chip *gc,
0101 unsigned int child_hwirq,
0102 unsigned int child_type,
0103 unsigned int *parent_hwirq,
0104 unsigned int *parent_type);
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115 int (*populate_parent_alloc_arg)(struct gpio_chip *gc,
0116 union gpio_irq_fwspec *fwspec,
0117 unsigned int parent_hwirq,
0118 unsigned int parent_type);
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128 unsigned int (*child_offset_to_irq)(struct gpio_chip *gc,
0129 unsigned int pin);
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139 struct irq_domain_ops child_irq_domain_ops;
0140 #endif
0141
0142
0143
0144
0145
0146
0147
0148 irq_flow_handler_t handler;
0149
0150
0151
0152
0153
0154
0155
0156 unsigned int default_type;
0157
0158
0159
0160
0161
0162
0163 struct lock_class_key *lock_key;
0164
0165
0166
0167
0168
0169
0170 struct lock_class_key *request_key;
0171
0172
0173
0174
0175
0176
0177
0178 irq_flow_handler_t parent_handler;
0179
0180 union {
0181
0182
0183
0184
0185
0186
0187
0188 void *parent_handler_data;
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198 void **parent_handler_data_array;
0199 };
0200
0201
0202
0203
0204
0205
0206 unsigned int num_parents;
0207
0208
0209
0210
0211
0212
0213
0214 unsigned int *parents;
0215
0216
0217
0218
0219
0220
0221 unsigned int *map;
0222
0223
0224
0225
0226
0227
0228 bool threaded;
0229
0230
0231
0232
0233
0234
0235
0236 bool per_parent_data;
0237
0238
0239
0240
0241
0242
0243
0244
0245 bool initialized;
0246
0247
0248
0249
0250
0251
0252
0253 int (*init_hw)(struct gpio_chip *gc);
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264 void (*init_valid_mask)(struct gpio_chip *gc,
0265 unsigned long *valid_mask,
0266 unsigned int ngpios);
0267
0268
0269
0270
0271
0272
0273
0274 unsigned long *valid_mask;
0275
0276
0277
0278
0279
0280
0281
0282 unsigned int first;
0283
0284
0285
0286
0287
0288
0289 void (*irq_enable)(struct irq_data *data);
0290
0291
0292
0293
0294
0295
0296 void (*irq_disable)(struct irq_data *data);
0297
0298
0299
0300
0301
0302 void (*irq_unmask)(struct irq_data *data);
0303
0304
0305
0306
0307
0308
0309 void (*irq_mask)(struct irq_data *data);
0310 };
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321
0322
0323
0324
0325
0326
0327
0328
0329
0330
0331
0332
0333
0334
0335
0336
0337
0338
0339
0340
0341
0342
0343
0344
0345
0346
0347
0348
0349
0350
0351
0352
0353
0354
0355
0356
0357
0358
0359
0360
0361
0362
0363
0364
0365
0366
0367
0368
0369
0370
0371
0372
0373
0374
0375
0376
0377
0378
0379
0380
0381
0382
0383
0384
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406
0407 struct gpio_chip {
0408 const char *label;
0409 struct gpio_device *gpiodev;
0410 struct device *parent;
0411 struct fwnode_handle *fwnode;
0412 struct module *owner;
0413
0414 int (*request)(struct gpio_chip *gc,
0415 unsigned int offset);
0416 void (*free)(struct gpio_chip *gc,
0417 unsigned int offset);
0418 int (*get_direction)(struct gpio_chip *gc,
0419 unsigned int offset);
0420 int (*direction_input)(struct gpio_chip *gc,
0421 unsigned int offset);
0422 int (*direction_output)(struct gpio_chip *gc,
0423 unsigned int offset, int value);
0424 int (*get)(struct gpio_chip *gc,
0425 unsigned int offset);
0426 int (*get_multiple)(struct gpio_chip *gc,
0427 unsigned long *mask,
0428 unsigned long *bits);
0429 void (*set)(struct gpio_chip *gc,
0430 unsigned int offset, int value);
0431 void (*set_multiple)(struct gpio_chip *gc,
0432 unsigned long *mask,
0433 unsigned long *bits);
0434 int (*set_config)(struct gpio_chip *gc,
0435 unsigned int offset,
0436 unsigned long config);
0437 int (*to_irq)(struct gpio_chip *gc,
0438 unsigned int offset);
0439
0440 void (*dbg_show)(struct seq_file *s,
0441 struct gpio_chip *gc);
0442
0443 int (*init_valid_mask)(struct gpio_chip *gc,
0444 unsigned long *valid_mask,
0445 unsigned int ngpios);
0446
0447 int (*add_pin_ranges)(struct gpio_chip *gc);
0448
0449 int (*en_hw_timestamp)(struct gpio_chip *gc,
0450 u32 offset,
0451 unsigned long flags);
0452 int (*dis_hw_timestamp)(struct gpio_chip *gc,
0453 u32 offset,
0454 unsigned long flags);
0455 int base;
0456 u16 ngpio;
0457 u16 offset;
0458 const char *const *names;
0459 bool can_sleep;
0460
0461 #if IS_ENABLED(CONFIG_GPIO_GENERIC)
0462 unsigned long (*read_reg)(void __iomem *reg);
0463 void (*write_reg)(void __iomem *reg, unsigned long data);
0464 bool be_bits;
0465 void __iomem *reg_dat;
0466 void __iomem *reg_set;
0467 void __iomem *reg_clr;
0468 void __iomem *reg_dir_out;
0469 void __iomem *reg_dir_in;
0470 bool bgpio_dir_unreadable;
0471 int bgpio_bits;
0472 raw_spinlock_t bgpio_lock;
0473 unsigned long bgpio_data;
0474 unsigned long bgpio_dir;
0475 #endif
0476
0477 #ifdef CONFIG_GPIOLIB_IRQCHIP
0478
0479
0480
0481
0482
0483
0484
0485
0486
0487
0488
0489 struct gpio_irq_chip irq;
0490 #endif
0491
0492
0493
0494
0495
0496
0497
0498 unsigned long *valid_mask;
0499
0500 #if defined(CONFIG_OF_GPIO)
0501
0502
0503
0504
0505
0506
0507
0508
0509
0510
0511 struct device_node *of_node;
0512
0513
0514
0515
0516
0517
0518 unsigned int of_gpio_n_cells;
0519
0520
0521
0522
0523
0524
0525
0526 int (*of_xlate)(struct gpio_chip *gc,
0527 const struct of_phandle_args *gpiospec, u32 *flags);
0528
0529
0530
0531
0532
0533
0534
0535
0536
0537 int (*of_gpio_ranges_fallback)(struct gpio_chip *gc,
0538 struct device_node *np);
0539
0540 #endif
0541 };
0542
0543 extern const char *gpiochip_is_requested(struct gpio_chip *gc,
0544 unsigned int offset);
0545
0546
0547
0548
0549
0550
0551
0552
0553
0554 #define for_each_requested_gpio_in_range(chip, i, base, size, label) \
0555 for (i = 0; i < size; i++) \
0556 if ((label = gpiochip_is_requested(chip, base + i)) == NULL) {} else
0557
0558
0559 #define for_each_requested_gpio(chip, i, label) \
0560 for_each_requested_gpio_in_range(chip, i, 0, chip->ngpio, label)
0561
0562
0563 extern int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
0564 struct lock_class_key *lock_key,
0565 struct lock_class_key *request_key);
0566
0567
0568
0569
0570
0571
0572
0573
0574
0575
0576
0577
0578
0579
0580
0581
0582
0583
0584
0585
0586
0587
0588
0589
0590 #ifdef CONFIG_LOCKDEP
0591 #define gpiochip_add_data(gc, data) ({ \
0592 static struct lock_class_key lock_key; \
0593 static struct lock_class_key request_key; \
0594 gpiochip_add_data_with_key(gc, data, &lock_key, \
0595 &request_key); \
0596 })
0597 #define devm_gpiochip_add_data(dev, gc, data) ({ \
0598 static struct lock_class_key lock_key; \
0599 static struct lock_class_key request_key; \
0600 devm_gpiochip_add_data_with_key(dev, gc, data, &lock_key, \
0601 &request_key); \
0602 })
0603 #else
0604 #define gpiochip_add_data(gc, data) gpiochip_add_data_with_key(gc, data, NULL, NULL)
0605 #define devm_gpiochip_add_data(dev, gc, data) \
0606 devm_gpiochip_add_data_with_key(dev, gc, data, NULL, NULL)
0607 #endif
0608
0609 static inline int gpiochip_add(struct gpio_chip *gc)
0610 {
0611 return gpiochip_add_data(gc, NULL);
0612 }
0613 extern void gpiochip_remove(struct gpio_chip *gc);
0614 extern int devm_gpiochip_add_data_with_key(struct device *dev, struct gpio_chip *gc, void *data,
0615 struct lock_class_key *lock_key,
0616 struct lock_class_key *request_key);
0617
0618 extern struct gpio_chip *gpiochip_find(void *data,
0619 int (*match)(struct gpio_chip *gc, void *data));
0620
0621 bool gpiochip_line_is_irq(struct gpio_chip *gc, unsigned int offset);
0622 int gpiochip_reqres_irq(struct gpio_chip *gc, unsigned int offset);
0623 void gpiochip_relres_irq(struct gpio_chip *gc, unsigned int offset);
0624 void gpiochip_disable_irq(struct gpio_chip *gc, unsigned int offset);
0625 void gpiochip_enable_irq(struct gpio_chip *gc, unsigned int offset);
0626
0627
0628 int gpiochip_irq_reqres(struct irq_data *data);
0629 void gpiochip_irq_relres(struct irq_data *data);
0630
0631
0632 #define GPIOCHIP_IRQ_RESOURCE_HELPERS \
0633 .irq_request_resources = gpiochip_irq_reqres, \
0634 .irq_release_resources = gpiochip_irq_relres
0635
0636 static inline void gpio_irq_chip_set_chip(struct gpio_irq_chip *girq,
0637 const struct irq_chip *chip)
0638 {
0639
0640 girq->chip = (struct irq_chip *)chip;
0641 }
0642
0643
0644 bool gpiochip_line_is_open_drain(struct gpio_chip *gc, unsigned int offset);
0645 bool gpiochip_line_is_open_source(struct gpio_chip *gc, unsigned int offset);
0646
0647
0648 bool gpiochip_line_is_persistent(struct gpio_chip *gc, unsigned int offset);
0649 bool gpiochip_line_is_valid(const struct gpio_chip *gc, unsigned int offset);
0650
0651
0652 void *gpiochip_get_data(struct gpio_chip *gc);
0653
0654 struct bgpio_pdata {
0655 const char *label;
0656 int base;
0657 int ngpio;
0658 };
0659
0660 #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
0661
0662 int gpiochip_populate_parent_fwspec_twocell(struct gpio_chip *gc,
0663 union gpio_irq_fwspec *gfwspec,
0664 unsigned int parent_hwirq,
0665 unsigned int parent_type);
0666 int gpiochip_populate_parent_fwspec_fourcell(struct gpio_chip *gc,
0667 union gpio_irq_fwspec *gfwspec,
0668 unsigned int parent_hwirq,
0669 unsigned int parent_type);
0670
0671 #endif
0672
0673 int bgpio_init(struct gpio_chip *gc, struct device *dev,
0674 unsigned long sz, void __iomem *dat, void __iomem *set,
0675 void __iomem *clr, void __iomem *dirout, void __iomem *dirin,
0676 unsigned long flags);
0677
0678 #define BGPIOF_BIG_ENDIAN BIT(0)
0679 #define BGPIOF_UNREADABLE_REG_SET BIT(1)
0680 #define BGPIOF_UNREADABLE_REG_DIR BIT(2)
0681 #define BGPIOF_BIG_ENDIAN_BYTE_ORDER BIT(3)
0682 #define BGPIOF_READ_OUTPUT_REG_SET BIT(4)
0683 #define BGPIOF_NO_OUTPUT BIT(5)
0684 #define BGPIOF_NO_SET_ON_INPUT BIT(6)
0685
0686 int gpiochip_irq_map(struct irq_domain *d, unsigned int irq,
0687 irq_hw_number_t hwirq);
0688 void gpiochip_irq_unmap(struct irq_domain *d, unsigned int irq);
0689
0690 int gpiochip_irq_domain_activate(struct irq_domain *domain,
0691 struct irq_data *data, bool reserve);
0692 void gpiochip_irq_domain_deactivate(struct irq_domain *domain,
0693 struct irq_data *data);
0694
0695 bool gpiochip_irqchip_irq_valid(const struct gpio_chip *gc,
0696 unsigned int offset);
0697
0698 #ifdef CONFIG_GPIOLIB_IRQCHIP
0699 int gpiochip_irqchip_add_domain(struct gpio_chip *gc,
0700 struct irq_domain *domain);
0701 #else
0702 static inline int gpiochip_irqchip_add_domain(struct gpio_chip *gc,
0703 struct irq_domain *domain)
0704 {
0705 WARN_ON(1);
0706 return -EINVAL;
0707 }
0708 #endif
0709
0710 int gpiochip_generic_request(struct gpio_chip *gc, unsigned int offset);
0711 void gpiochip_generic_free(struct gpio_chip *gc, unsigned int offset);
0712 int gpiochip_generic_config(struct gpio_chip *gc, unsigned int offset,
0713 unsigned long config);
0714
0715
0716
0717
0718
0719
0720
0721 struct gpio_pin_range {
0722 struct list_head node;
0723 struct pinctrl_dev *pctldev;
0724 struct pinctrl_gpio_range range;
0725 };
0726
0727 #ifdef CONFIG_PINCTRL
0728
0729 int gpiochip_add_pin_range(struct gpio_chip *gc, const char *pinctl_name,
0730 unsigned int gpio_offset, unsigned int pin_offset,
0731 unsigned int npins);
0732 int gpiochip_add_pingroup_range(struct gpio_chip *gc,
0733 struct pinctrl_dev *pctldev,
0734 unsigned int gpio_offset, const char *pin_group);
0735 void gpiochip_remove_pin_ranges(struct gpio_chip *gc);
0736
0737 #else
0738
0739 static inline int
0740 gpiochip_add_pin_range(struct gpio_chip *gc, const char *pinctl_name,
0741 unsigned int gpio_offset, unsigned int pin_offset,
0742 unsigned int npins)
0743 {
0744 return 0;
0745 }
0746 static inline int
0747 gpiochip_add_pingroup_range(struct gpio_chip *gc,
0748 struct pinctrl_dev *pctldev,
0749 unsigned int gpio_offset, const char *pin_group)
0750 {
0751 return 0;
0752 }
0753
0754 static inline void
0755 gpiochip_remove_pin_ranges(struct gpio_chip *gc)
0756 {
0757 }
0758
0759 #endif
0760
0761 struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *gc,
0762 unsigned int hwnum,
0763 const char *label,
0764 enum gpio_lookup_flags lflags,
0765 enum gpiod_flags dflags);
0766 void gpiochip_free_own_desc(struct gpio_desc *desc);
0767
0768 #ifdef CONFIG_GPIOLIB
0769
0770
0771 int gpiochip_lock_as_irq(struct gpio_chip *gc, unsigned int offset);
0772 void gpiochip_unlock_as_irq(struct gpio_chip *gc, unsigned int offset);
0773
0774
0775 struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc);
0776
0777 #else
0778
0779 static inline struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc)
0780 {
0781
0782 WARN_ON(1);
0783 return ERR_PTR(-ENODEV);
0784 }
0785
0786 static inline int gpiochip_lock_as_irq(struct gpio_chip *gc,
0787 unsigned int offset)
0788 {
0789 WARN_ON(1);
0790 return -EINVAL;
0791 }
0792
0793 static inline void gpiochip_unlock_as_irq(struct gpio_chip *gc,
0794 unsigned int offset)
0795 {
0796 WARN_ON(1);
0797 }
0798 #endif
0799
0800 #define for_each_gpiochip_node(dev, child) \
0801 device_for_each_child_node(dev, child) \
0802 if (!fwnode_property_present(child, "gpio-controller")) {} else
0803
0804 static inline unsigned int gpiochip_node_count(struct device *dev)
0805 {
0806 struct fwnode_handle *child;
0807 unsigned int count = 0;
0808
0809 for_each_gpiochip_node(dev, child)
0810 count++;
0811
0812 return count;
0813 }
0814
0815 static inline struct fwnode_handle *gpiochip_node_get_first(struct device *dev)
0816 {
0817 struct fwnode_handle *fwnode;
0818
0819 for_each_gpiochip_node(dev, fwnode)
0820 return fwnode;
0821
0822 return NULL;
0823 }
0824
0825 #endif