diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2011-07-02 12:57:35 -0400 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2011-09-20 02:05:36 -0400 |
commit | d7f8172ca93b61135d6db293c6440b2e97fc87ee (patch) | |
tree | a3124b1956a2cacdacb0d04035996415484f6357 /drivers/gpu/drm/nouveau/nv50_gpio.c | |
parent | eeb3ca12b4658c569bd60fe60c4c45c627e842a6 (diff) |
drm/nvd0/gpio: initial implementation
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nv50_gpio.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nv50_gpio.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/nv50_gpio.c b/drivers/gpu/drm/nouveau/nv50_gpio.c index d4f4206dad7e..793a5ccca121 100644 --- a/drivers/gpu/drm/nouveau/nv50_gpio.c +++ b/drivers/gpu/drm/nouveau/nv50_gpio.c | |||
@@ -98,6 +98,37 @@ nv50_gpio_set(struct drm_device *dev, enum dcb_gpio_tag tag, int state) | |||
98 | } | 98 | } |
99 | 99 | ||
100 | int | 100 | int |
101 | nvd0_gpio_get(struct drm_device *dev, enum dcb_gpio_tag tag) | ||
102 | { | ||
103 | struct dcb_gpio_entry *gpio; | ||
104 | u32 v; | ||
105 | |||
106 | gpio = nouveau_bios_gpio_entry(dev, tag); | ||
107 | if (!gpio) | ||
108 | return -ENOENT; | ||
109 | |||
110 | v = nv_rd32(dev, 0x00d610 + (gpio->line * 4)); | ||
111 | v &= 0x00004000; | ||
112 | return (!!v == (gpio->state[1] & 1)); | ||
113 | } | ||
114 | |||
115 | int | ||
116 | nvd0_gpio_set(struct drm_device *dev, enum dcb_gpio_tag tag, int state) | ||
117 | { | ||
118 | struct dcb_gpio_entry *gpio; | ||
119 | u32 v; | ||
120 | |||
121 | gpio = nouveau_bios_gpio_entry(dev, tag); | ||
122 | if (!gpio) | ||
123 | return -ENOENT; | ||
124 | |||
125 | v = gpio->state[state] ^ 2; | ||
126 | |||
127 | nv_mask(dev, 0x00d610 + (gpio->line * 4), 0x00003000, v << 12); | ||
128 | return 0; | ||
129 | } | ||
130 | |||
131 | int | ||
101 | nv50_gpio_irq_register(struct drm_device *dev, enum dcb_gpio_tag tag, | 132 | nv50_gpio_irq_register(struct drm_device *dev, enum dcb_gpio_tag tag, |
102 | void (*handler)(void *, int), void *data) | 133 | void (*handler)(void *, int), void *data) |
103 | { | 134 | { |