linux/drivers/gpu/drm/nouveau/core/subdev/gpio/priv.h
<<
>>
Prefs
   1#ifndef __NVKM_GPIO_H__
   2#define __NVKM_GPIO_H__
   3
   4#include <subdev/gpio.h>
   5
   6#define nouveau_gpio_create(p,e,o,d)                                           \
   7        nouveau_gpio_create_((p), (e), (o), sizeof(**d), (void **)d)
   8#define nouveau_gpio_destroy(p) ({                                             \
   9        struct nouveau_gpio *gpio = (p);                                       \
  10        _nouveau_gpio_dtor(nv_object(gpio));                                   \
  11})
  12#define nouveau_gpio_init(p) ({                                                \
  13        struct nouveau_gpio *gpio = (p);                                       \
  14        _nouveau_gpio_init(nv_object(gpio));                                   \
  15})
  16#define nouveau_gpio_fini(p,s) ({                                              \
  17        struct nouveau_gpio *gpio = (p);                                       \
  18        _nouveau_gpio_fini(nv_object(gpio), (s));                              \
  19})
  20
  21int  nouveau_gpio_create_(struct nouveau_object *, struct nouveau_object *,
  22                          struct nouveau_oclass *, int, void **);
  23int  _nouveau_gpio_ctor(struct nouveau_object *, struct nouveau_object *,
  24                        struct nouveau_oclass *, void *, u32,
  25                        struct nouveau_object **);
  26void _nouveau_gpio_dtor(struct nouveau_object *);
  27int  _nouveau_gpio_init(struct nouveau_object *);
  28int  _nouveau_gpio_fini(struct nouveau_object *, bool);
  29
  30struct nouveau_gpio_impl {
  31        struct nouveau_oclass base;
  32        int lines;
  33
  34        /* read and ack pending interrupts, returning only data
  35         * for lines that have not been masked off, while still
  36         * performing the ack for anything that was pending.
  37         */
  38        void (*intr_stat)(struct nouveau_gpio *, u32 *, u32 *);
  39
  40        /* mask on/off interrupts for hi/lo transitions on a
  41         * given set of gpio lines
  42         */
  43        void (*intr_mask)(struct nouveau_gpio *, u32, u32, u32);
  44
  45        /* configure gpio direction and output value */
  46        int  (*drive)(struct nouveau_gpio *, int line, int dir, int out);
  47
  48        /* sense current state of given gpio line */
  49        int  (*sense)(struct nouveau_gpio *, int line);
  50
  51        /*XXX*/
  52        void (*reset)(struct nouveau_gpio *, u8);
  53};
  54
  55void nv50_gpio_reset(struct nouveau_gpio *, u8);
  56int  nv50_gpio_drive(struct nouveau_gpio *, int, int, int);
  57int  nv50_gpio_sense(struct nouveau_gpio *, int);
  58
  59void nv92_gpio_intr_stat(struct nouveau_gpio *, u32 *, u32 *);
  60void nv92_gpio_intr_mask(struct nouveau_gpio *, u32, u32, u32);
  61
  62void nvd0_gpio_reset(struct nouveau_gpio *, u8);
  63int  nvd0_gpio_drive(struct nouveau_gpio *, int, int, int);
  64int  nvd0_gpio_sense(struct nouveau_gpio *, int);
  65
  66
  67#endif
  68