These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / gpu / drm / nouveau / nvkm / subdev / gpio / gk104.c
index 42fd2fa..3f45afd 100644 (file)
 static void
 gk104_gpio_intr_stat(struct nvkm_gpio *gpio, u32 *hi, u32 *lo)
 {
-       u32 intr0 = nv_rd32(gpio, 0x00dc00);
-       u32 intr1 = nv_rd32(gpio, 0x00dc80);
-       u32 stat0 = nv_rd32(gpio, 0x00dc08) & intr0;
-       u32 stat1 = nv_rd32(gpio, 0x00dc88) & intr1;
+       struct nvkm_device *device = gpio->subdev.device;
+       u32 intr0 = nvkm_rd32(device, 0x00dc00);
+       u32 intr1 = nvkm_rd32(device, 0x00dc80);
+       u32 stat0 = nvkm_rd32(device, 0x00dc08) & intr0;
+       u32 stat1 = nvkm_rd32(device, 0x00dc88) & intr1;
        *lo = (stat1 & 0xffff0000) | (stat0 >> 16);
        *hi = (stat1 << 16) | (stat0 & 0x0000ffff);
-       nv_wr32(gpio, 0x00dc00, intr0);
-       nv_wr32(gpio, 0x00dc80, intr1);
+       nvkm_wr32(device, 0x00dc00, intr0);
+       nvkm_wr32(device, 0x00dc80, intr1);
 }
 
 void
 gk104_gpio_intr_mask(struct nvkm_gpio *gpio, u32 type, u32 mask, u32 data)
 {
-       u32 inte0 = nv_rd32(gpio, 0x00dc08);
-       u32 inte1 = nv_rd32(gpio, 0x00dc88);
+       struct nvkm_device *device = gpio->subdev.device;
+       u32 inte0 = nvkm_rd32(device, 0x00dc08);
+       u32 inte1 = nvkm_rd32(device, 0x00dc88);
        if (type & NVKM_GPIO_LO)
                inte0 = (inte0 & ~(mask << 16)) | (data << 16);
        if (type & NVKM_GPIO_HI)
@@ -51,23 +53,22 @@ gk104_gpio_intr_mask(struct nvkm_gpio *gpio, u32 type, u32 mask, u32 data)
                inte1 = (inte1 & ~(mask << 16)) | (data << 16);
        if (type & NVKM_GPIO_HI)
                inte1 = (inte1 & ~mask) | data;
-       nv_wr32(gpio, 0x00dc08, inte0);
-       nv_wr32(gpio, 0x00dc88, inte1);
+       nvkm_wr32(device, 0x00dc08, inte0);
+       nvkm_wr32(device, 0x00dc88, inte1);
 }
 
-struct nvkm_oclass *
-gk104_gpio_oclass = &(struct nvkm_gpio_impl) {
-       .base.handle = NV_SUBDEV(GPIO, 0xe0),
-       .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
+gk104_gpio = {
        .lines = 32,
        .intr_stat = gk104_gpio_intr_stat,
        .intr_mask = gk104_gpio_intr_mask,
-       .drive = gf110_gpio_drive,
-       .sense = gf110_gpio_sense,
-       .reset = gf110_gpio_reset,
-}.base;
+       .drive = gf119_gpio_drive,
+       .sense = gf119_gpio_sense,
+       .reset = gf119_gpio_reset,
+};
+
+int
+gk104_gpio_new(struct nvkm_device *device, int index, struct nvkm_gpio **pgpio)
+{
+       return nvkm_gpio_new_(&gk104_gpio, device, index, pgpio);
+}