These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / gpu / drm / nouveau / nvkm / subdev / gpio / nv10.c
index 2b29515..ae3499b 100644 (file)
 static int
 nv10_gpio_sense(struct nvkm_gpio *gpio, int line)
 {
+       struct nvkm_device *device = gpio->subdev.device;
        if (line < 2) {
                line = line * 16;
-               line = nv_rd32(gpio, 0x600818) >> line;
+               line = nvkm_rd32(device, 0x600818) >> line;
                return !!(line & 0x0100);
        } else
        if (line < 10) {
                line = (line - 2) * 4;
-               line = nv_rd32(gpio, 0x60081c) >> line;
+               line = nvkm_rd32(device, 0x60081c) >> line;
                return !!(line & 0x04);
        } else
        if (line < 14) {
                line = (line - 10) * 4;
-               line = nv_rd32(gpio, 0x600850) >> line;
+               line = nvkm_rd32(device, 0x600850) >> line;
                return !!(line & 0x04);
        }
 
@@ -50,6 +51,7 @@ nv10_gpio_sense(struct nvkm_gpio *gpio, int line)
 static int
 nv10_gpio_drive(struct nvkm_gpio *gpio, int line, int dir, int out)
 {
+       struct nvkm_device *device = gpio->subdev.device;
        u32 reg, mask, data;
 
        if (line < 2) {
@@ -73,43 +75,44 @@ nv10_gpio_drive(struct nvkm_gpio *gpio, int line, int dir, int out)
                return -EINVAL;
        }
 
-       nv_mask(gpio, reg, mask << line, data << line);
+       nvkm_mask(device, reg, mask << line, data << line);
        return 0;
 }
 
 static void
 nv10_gpio_intr_stat(struct nvkm_gpio *gpio, u32 *hi, u32 *lo)
 {
-       u32 intr = nv_rd32(gpio, 0x001104);
-       u32 stat = nv_rd32(gpio, 0x001144) & intr;
+       struct nvkm_device *device = gpio->subdev.device;
+       u32 intr = nvkm_rd32(device, 0x001104);
+       u32 stat = nvkm_rd32(device, 0x001144) & intr;
        *lo = (stat & 0xffff0000) >> 16;
        *hi = (stat & 0x0000ffff);
-       nv_wr32(gpio, 0x001104, intr);
+       nvkm_wr32(device, 0x001104, intr);
 }
 
 static void
 nv10_gpio_intr_mask(struct nvkm_gpio *gpio, u32 type, u32 mask, u32 data)
 {
-       u32 inte = nv_rd32(gpio, 0x001144);
+       struct nvkm_device *device = gpio->subdev.device;
+       u32 inte = nvkm_rd32(device, 0x001144);
        if (type & NVKM_GPIO_LO)
                inte = (inte & ~(mask << 16)) | (data << 16);
        if (type & NVKM_GPIO_HI)
                inte = (inte & ~mask) | data;
-       nv_wr32(gpio, 0x001144, inte);
+       nvkm_wr32(device, 0x001144, inte);
 }
 
-struct nvkm_oclass *
-nv10_gpio_oclass = &(struct nvkm_gpio_impl) {
-       .base.handle = NV_SUBDEV(GPIO, 0x10),
-       .base.ofuncs = &(struct nvkm_ofuncs) {
-               .ctor = _nvkm_gpio_ctor,
-               .dtor = _nvkm_gpio_dtor,
-               .init = _nvkm_gpio_init,
-               .fini = _nvkm_gpio_fini,
-       },
+static const struct nvkm_gpio_func
+nv10_gpio = {
        .lines = 16,
        .intr_stat = nv10_gpio_intr_stat,
        .intr_mask = nv10_gpio_intr_mask,
        .drive = nv10_gpio_drive,
        .sense = nv10_gpio_sense,
-}.base;
+};
+
+int
+nv10_gpio_new(struct nvkm_device *device, int index, struct nvkm_gpio **pgpio)
+{
+       return nvkm_gpio_new_(&nv10_gpio, device, index, pgpio);
+}