drm/nouveau/gpio: remove invert flag, use state[] everywhere
authorBen Skeggs <bskeggs@redhat.com>
Mon, 12 Sep 2011 19:32:43 +0000 (05:32 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Wed, 21 Dec 2011 09:01:12 +0000 (19:01 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nouveau_bios.c
drivers/gpu/drm/nouveau/nouveau_bios.h
drivers/gpu/drm/nouveau/nv10_gpio.c

index 5fc201b..41899ec 100644 (file)
@@ -5834,7 +5834,8 @@ parse_dcb_gpio_table(struct nvbios *bios)
                        e = new_gpio_entry(bios);
                        e->tag = DCB_GPIO_TVDAC0;
                        e->line = tvdac_gpio[1] >> 4;
-                       e->invert = tvdac_gpio[0] & 2;
+                       e->state[0] = !!(tvdac_gpio[0] & 2);
+                       e->state[1] = !e->state[0];
                }
 
                goto no_table;
@@ -5858,7 +5859,8 @@ parse_dcb_gpio_table(struct nvbios *bios)
                        }
 
                        e->line = (e->entry & 0x001f);
-                       e->invert = ((e->entry & 0xf800) >> 11) != 4;
+                       e->state[0] = ((e->entry & 0xf800) >> 11) != 4;
+                       e->state[1] = !e->state[0];
                } else {
                        e->entry = ROM32(entry[0]);
                        e->tag = (e->entry & 0x0000ff00) >> 8;
index 3f36c70..a1e31ea 100644 (file)
@@ -65,7 +65,6 @@ enum dcb_gpio_tag {
 struct dcb_gpio_entry {
        enum dcb_gpio_tag tag;
        int line;
-       bool invert;
        uint32_t entry;
        uint8_t state_default;
        uint8_t state[2];
index 007fc29..748c9f7 100644 (file)
@@ -68,7 +68,7 @@ nv10_gpio_get(struct drm_device *dev, enum dcb_gpio_tag tag)
 
        value = NVReadCRTC(dev, 0, reg) >> shift;
 
-       return (ent->invert ? 1 : 0) ^ (value & 1);
+       return (value & 1) == ent->state[1];
 }
 
 int
@@ -83,7 +83,7 @@ nv10_gpio_set(struct drm_device *dev, enum dcb_gpio_tag tag, int state)
        if (!get_gpio_location(ent, &reg, &shift, &mask))
                return -ENODEV;
 
-       value = ((ent->invert ? 1 : 0) ^ (state ? 1 : 0)) << shift;
+       value = ent->state[state & 1] << shift;
        mask = ~(mask << shift);
 
        NVWriteCRTC(dev, 0, reg, value | (NVReadCRTC(dev, 0, reg) & mask));