drm/nouveau/gpio: convert to new-style nvkm_subdev
authorBen Skeggs <bskeggs@redhat.com>
Thu, 20 Aug 2015 04:54:20 +0000 (14:54 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 28 Aug 2015 02:40:43 +0000 (12:40 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
31 files changed:
drivers/gpu/drm/nouveau/dispnv04/dac.c
drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
drivers/gpu/drm/nouveau/include/nvif/device.h
drivers/gpu/drm/nouveau/include/nvkm/subdev/gpio.h
drivers/gpu/drm/nouveau/nouveau_connector.c
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
drivers/gpu/drm/nouveau/nvkm/engine/device/gf100.c
drivers/gpu/drm/nouveau/nvkm/engine/device/gk104.c
drivers/gpu/drm/nouveau/nvkm/engine/device/gm100.c
drivers/gpu/drm/nouveau/nvkm/engine/device/nv10.c
drivers/gpu/drm/nouveau/nvkm/engine/device/nv20.c
drivers/gpu/drm/nouveau/nvkm/engine/device/nv30.c
drivers/gpu/drm/nouveau/nvkm/engine/device/nv40.c
drivers/gpu/drm/nouveau/nvkm/engine/device/nv50.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/conn.c
drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.c
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.c
drivers/gpu/drm/nouveau/nvkm/subdev/gpio/Kbuild
drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.c
drivers/gpu/drm/nouveau/nvkm/subdev/gpio/g94.c
drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gf110.c [deleted file]
drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gf119.c [new file with mode: 0644]
drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gk104.c
drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv10.c
drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv50.c
drivers/gpu/drm/nouveau/nvkm/subdev/gpio/priv.h
drivers/gpu/drm/nouveau/nvkm/subdev/therm/fan.c
drivers/gpu/drm/nouveau/nvkm/subdev/therm/fanpwm.c
drivers/gpu/drm/nouveau/nvkm/subdev/therm/fantog.c
drivers/gpu/drm/nouveau/nvkm/subdev/volt/gpio.c

index 71e99cdfc40ebb4162dceca6928903289be80fd6..78cb033bc015a4b5dcfeb7f056a1d8d66f1ae35c 100644 (file)
@@ -270,10 +270,10 @@ uint32_t nv17_dac_sample_load(struct drm_encoder *encoder)
        }
 
        if (gpio) {
-               saved_gpio1 = gpio->get(gpio, 0, DCB_GPIO_TVDAC1, 0xff);
-               saved_gpio0 = gpio->get(gpio, 0, DCB_GPIO_TVDAC0, 0xff);
-               gpio->set(gpio, 0, DCB_GPIO_TVDAC1, 0xff, dcb->type == DCB_OUTPUT_TV);
-               gpio->set(gpio, 0, DCB_GPIO_TVDAC0, 0xff, dcb->type == DCB_OUTPUT_TV);
+               saved_gpio1 = nvkm_gpio_get(gpio, 0, DCB_GPIO_TVDAC1, 0xff);
+               saved_gpio0 = nvkm_gpio_get(gpio, 0, DCB_GPIO_TVDAC0, 0xff);
+               nvkm_gpio_set(gpio, 0, DCB_GPIO_TVDAC1, 0xff, dcb->type == DCB_OUTPUT_TV);
+               nvkm_gpio_set(gpio, 0, DCB_GPIO_TVDAC0, 0xff, dcb->type == DCB_OUTPUT_TV);
        }
 
        msleep(4);
@@ -325,8 +325,8 @@ uint32_t nv17_dac_sample_load(struct drm_encoder *encoder)
        nvif_wr32(device, NV_PBUS_POWERCTRL_2, saved_powerctrl_2);
 
        if (gpio) {
-               gpio->set(gpio, 0, DCB_GPIO_TVDAC1, 0xff, saved_gpio1);
-               gpio->set(gpio, 0, DCB_GPIO_TVDAC0, 0xff, saved_gpio0);
+               nvkm_gpio_set(gpio, 0, DCB_GPIO_TVDAC1, 0xff, saved_gpio1);
+               nvkm_gpio_set(gpio, 0, DCB_GPIO_TVDAC0, 0xff, saved_gpio0);
        }
 
        return sample;
index 792bf5428f354cc3dae7ff67057230d84038ecc8..c59b2c7d94e14c32628ff8f23edab875e09c0b70 100644 (file)
@@ -62,8 +62,8 @@ static uint32_t nv42_tv_sample_load(struct drm_encoder *encoder)
        head = (dacclk & 0x100) >> 8;
 
        /* Save the previous state. */
-       gpio1 = gpio->get(gpio, 0, DCB_GPIO_TVDAC1, 0xff);
-       gpio0 = gpio->get(gpio, 0, DCB_GPIO_TVDAC0, 0xff);
+       gpio1 = nvkm_gpio_get(gpio, 0, DCB_GPIO_TVDAC1, 0xff);
+       gpio0 = nvkm_gpio_get(gpio, 0, DCB_GPIO_TVDAC0, 0xff);
        fp_htotal = NVReadRAMDAC(dev, head, NV_PRAMDAC_FP_HTOTAL);
        fp_hsync_start = NVReadRAMDAC(dev, head, NV_PRAMDAC_FP_HSYNC_START);
        fp_hsync_end = NVReadRAMDAC(dev, head, NV_PRAMDAC_FP_HSYNC_END);
@@ -74,8 +74,8 @@ static uint32_t nv42_tv_sample_load(struct drm_encoder *encoder)
        ctv_6c = NVReadRAMDAC(dev, head, 0x680c6c);
 
        /* Prepare the DAC for load detection.  */
-       gpio->set(gpio, 0, DCB_GPIO_TVDAC1, 0xff, true);
-       gpio->set(gpio, 0, DCB_GPIO_TVDAC0, 0xff, true);
+       nvkm_gpio_set(gpio, 0, DCB_GPIO_TVDAC1, 0xff, true);
+       nvkm_gpio_set(gpio, 0, DCB_GPIO_TVDAC0, 0xff, true);
 
        NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_HTOTAL, 1343);
        NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_HSYNC_START, 1047);
@@ -120,8 +120,8 @@ static uint32_t nv42_tv_sample_load(struct drm_encoder *encoder)
        NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_HSYNC_END, fp_hsync_end);
        NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_HSYNC_START, fp_hsync_start);
        NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_HTOTAL, fp_htotal);
-       gpio->set(gpio, 0, DCB_GPIO_TVDAC1, 0xff, gpio1);
-       gpio->set(gpio, 0, DCB_GPIO_TVDAC0, 0xff, gpio0);
+       nvkm_gpio_set(gpio, 0, DCB_GPIO_TVDAC1, 0xff, gpio1);
+       nvkm_gpio_set(gpio, 0, DCB_GPIO_TVDAC0, 0xff, gpio0);
 
        return sample;
 }
@@ -395,8 +395,8 @@ static void  nv17_tv_dpms(struct drm_encoder *encoder, int mode)
 
        nv_load_ptv(dev, regs, 200);
 
-       gpio->set(gpio, 0, DCB_GPIO_TVDAC1, 0xff, mode == DRM_MODE_DPMS_ON);
-       gpio->set(gpio, 0, DCB_GPIO_TVDAC0, 0xff, mode == DRM_MODE_DPMS_ON);
+       nvkm_gpio_set(gpio, 0, DCB_GPIO_TVDAC1, 0xff, mode == DRM_MODE_DPMS_ON);
+       nvkm_gpio_set(gpio, 0, DCB_GPIO_TVDAC0, 0xff, mode == DRM_MODE_DPMS_ON);
 
        nv04_dac_update_dacclk(encoder, mode == DRM_MODE_DPMS_ON);
 }
index 2b17b13b9dbaaf9eb74a3d0362e52837e09f244e..6cc9c65833a601f16eff0400ffc1a58fc98808f8 100644 (file)
@@ -54,7 +54,7 @@ u64  nvif_device_time(struct nvif_device *);
 #define nvxx_fb(a) nvxx_device(a)->fb
 #define nvxx_mmu(a) nvkm_mmu(nvxx_device(a))
 #define nvxx_bar(a) nvxx_device(a)->bar
-#define nvxx_gpio(a) nvkm_gpio(nvxx_device(a))
+#define nvxx_gpio(a) nvxx_device(a)->gpio
 #define nvxx_clk(a) nvxx_device(a)->clk
 #define nvxx_i2c(a) nvkm_i2c(nvxx_device(a))
 #define nvxx_therm(a) nvkm_therm(nvxx_device(a))
index f409cbb2bce7849a45c5f897504831e0eb01c8fd..9b9c6d2f90b6d9840c51cdab4fd3c091223a4fe5 100644 (file)
@@ -19,26 +19,21 @@ struct nvkm_gpio_ntfy_rep {
 };
 
 struct nvkm_gpio {
+       const struct nvkm_gpio_func *func;
        struct nvkm_subdev subdev;
 
        struct nvkm_event event;
-
-       void (*reset)(struct nvkm_gpio *, u8 func);
-       int  (*find)(struct nvkm_gpio *, int idx, u8 tag, u8 line,
-                    struct dcb_gpio_func *);
-       int  (*set)(struct nvkm_gpio *, int idx, u8 tag, u8 line, int state);
-       int  (*get)(struct nvkm_gpio *, int idx, u8 tag, u8 line);
 };
 
-static inline struct nvkm_gpio *
-nvkm_gpio(void *obj)
-{
-       return (void *)nvkm_subdev(obj, NVDEV_SUBDEV_GPIO);
-}
-
-extern struct nvkm_oclass *nv10_gpio_oclass;
-extern struct nvkm_oclass *nv50_gpio_oclass;
-extern struct nvkm_oclass *g94_gpio_oclass;
-extern struct nvkm_oclass *gf110_gpio_oclass;
-extern struct nvkm_oclass *gk104_gpio_oclass;
+void nvkm_gpio_reset(struct nvkm_gpio *, u8 func);
+int nvkm_gpio_find(struct nvkm_gpio *, int idx, u8 tag, u8 line,
+                  struct dcb_gpio_func *);
+int nvkm_gpio_set(struct nvkm_gpio *, int idx, u8 tag, u8 line, int state);
+int nvkm_gpio_get(struct nvkm_gpio *, int idx, u8 tag, u8 line);
+
+int nv10_gpio_new(struct nvkm_device *, int, struct nvkm_gpio **);
+int nv50_gpio_new(struct nvkm_device *, int, struct nvkm_gpio **);
+int g94_gpio_new(struct nvkm_device *, int, struct nvkm_gpio **);
+int gf119_gpio_new(struct nvkm_device *, int, struct nvkm_gpio **);
+int gk104_gpio_new(struct nvkm_device *, int, struct nvkm_gpio **);
 #endif
index 309c20b086d4251b2dd66d2c4a6f213f7554c31e..2e7cbe933533c97b9a211827d5005d2adc282496 100644 (file)
@@ -125,9 +125,9 @@ nouveau_connector_ddc_detect(struct drm_connector *connector)
         * is handled by the SOR itself, and not required for LVDS DDC.
         */
        if (nv_connector->type == DCB_CONNECTOR_eDP) {
-               panel = gpio->get(gpio, 0, DCB_GPIO_PANEL_POWER, 0xff);
+               panel = nvkm_gpio_get(gpio, 0, DCB_GPIO_PANEL_POWER, 0xff);
                if (panel == 0) {
-                       gpio->set(gpio, 0, DCB_GPIO_PANEL_POWER, 0xff, 1);
+                       nvkm_gpio_set(gpio, 0, DCB_GPIO_PANEL_POWER, 0xff, 1);
                        msleep(300);
                }
        }
@@ -157,7 +157,7 @@ nouveau_connector_ddc_detect(struct drm_connector *connector)
         * state to avoid confusing the SOR for other output types.
         */
        if (!nv_encoder && panel == 0)
-               gpio->set(gpio, 0, DCB_GPIO_PANEL_POWER, 0xff, panel);
+               nvkm_gpio_set(gpio, 0, DCB_GPIO_PANEL_POWER, 0xff, panel);
 
        return nv_encoder;
 }
index c3afd03df5a98890956ffd9f7ef712ac08f1f03c..3caaa9caf4d3e92aadfecfa7fac90635381849ab 100644 (file)
@@ -121,7 +121,7 @@ nv10_chipset = {
        .clk = nv04_clk_new,
        .devinit = nv10_devinit_new,
        .fb = nv10_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv04_instmem_new,
 //     .mc = nv04_mc_new,
@@ -140,7 +140,7 @@ nv11_chipset = {
        .clk = nv04_clk_new,
        .devinit = nv10_devinit_new,
        .fb = nv10_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv04_instmem_new,
 //     .mc = nv04_mc_new,
@@ -161,7 +161,7 @@ nv15_chipset = {
        .clk = nv04_clk_new,
        .devinit = nv10_devinit_new,
        .fb = nv10_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv04_instmem_new,
 //     .mc = nv04_mc_new,
@@ -182,7 +182,7 @@ nv17_chipset = {
        .clk = nv04_clk_new,
        .devinit = nv10_devinit_new,
        .fb = nv10_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv04_instmem_new,
 //     .mc = nv04_mc_new,
@@ -203,7 +203,7 @@ nv18_chipset = {
        .clk = nv04_clk_new,
        .devinit = nv10_devinit_new,
        .fb = nv10_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv04_instmem_new,
 //     .mc = nv04_mc_new,
@@ -224,7 +224,7 @@ nv1a_chipset = {
        .clk = nv04_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv1a_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv04_instmem_new,
 //     .mc = nv04_mc_new,
@@ -245,7 +245,7 @@ nv1f_chipset = {
        .clk = nv04_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv1a_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv04_instmem_new,
 //     .mc = nv04_mc_new,
@@ -266,7 +266,7 @@ nv20_chipset = {
        .clk = nv04_clk_new,
        .devinit = nv20_devinit_new,
        .fb = nv20_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv04_instmem_new,
 //     .mc = nv04_mc_new,
@@ -287,7 +287,7 @@ nv25_chipset = {
        .clk = nv04_clk_new,
        .devinit = nv20_devinit_new,
        .fb = nv25_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv04_instmem_new,
 //     .mc = nv04_mc_new,
@@ -308,7 +308,7 @@ nv28_chipset = {
        .clk = nv04_clk_new,
        .devinit = nv20_devinit_new,
        .fb = nv25_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv04_instmem_new,
 //     .mc = nv04_mc_new,
@@ -329,7 +329,7 @@ nv2a_chipset = {
        .clk = nv04_clk_new,
        .devinit = nv20_devinit_new,
        .fb = nv25_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv04_instmem_new,
 //     .mc = nv04_mc_new,
@@ -350,7 +350,7 @@ nv30_chipset = {
        .clk = nv04_clk_new,
        .devinit = nv20_devinit_new,
        .fb = nv30_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv04_instmem_new,
 //     .mc = nv04_mc_new,
@@ -371,7 +371,7 @@ nv31_chipset = {
        .clk = nv04_clk_new,
        .devinit = nv20_devinit_new,
        .fb = nv30_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv04_instmem_new,
 //     .mc = nv04_mc_new,
@@ -393,7 +393,7 @@ nv34_chipset = {
        .clk = nv04_clk_new,
        .devinit = nv10_devinit_new,
        .fb = nv10_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv04_instmem_new,
 //     .mc = nv04_mc_new,
@@ -415,7 +415,7 @@ nv35_chipset = {
        .clk = nv04_clk_new,
        .devinit = nv20_devinit_new,
        .fb = nv35_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv04_instmem_new,
 //     .mc = nv04_mc_new,
@@ -436,7 +436,7 @@ nv36_chipset = {
        .clk = nv04_clk_new,
        .devinit = nv20_devinit_new,
        .fb = nv36_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv04_instmem_new,
 //     .mc = nv04_mc_new,
@@ -458,7 +458,7 @@ nv40_chipset = {
        .clk = nv40_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv40_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv40_instmem_new,
 //     .mc = nv40_mc_new,
@@ -483,7 +483,7 @@ nv41_chipset = {
        .clk = nv40_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv41_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv40_instmem_new,
 //     .mc = nv40_mc_new,
@@ -508,7 +508,7 @@ nv42_chipset = {
        .clk = nv40_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv41_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv40_instmem_new,
 //     .mc = nv40_mc_new,
@@ -533,7 +533,7 @@ nv43_chipset = {
        .clk = nv40_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv41_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv40_instmem_new,
 //     .mc = nv40_mc_new,
@@ -558,7 +558,7 @@ nv44_chipset = {
        .clk = nv40_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv44_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv40_instmem_new,
 //     .mc = nv44_mc_new,
@@ -583,7 +583,7 @@ nv45_chipset = {
        .clk = nv40_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv40_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv40_instmem_new,
 //     .mc = nv40_mc_new,
@@ -608,7 +608,7 @@ nv46_chipset = {
        .clk = nv40_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv46_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv40_instmem_new,
 //     .mc = nv44_mc_new,
@@ -633,7 +633,7 @@ nv47_chipset = {
        .clk = nv40_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv47_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv40_instmem_new,
 //     .mc = nv40_mc_new,
@@ -658,7 +658,7 @@ nv49_chipset = {
        .clk = nv40_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv49_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv40_instmem_new,
 //     .mc = nv40_mc_new,
@@ -683,7 +683,7 @@ nv4a_chipset = {
        .clk = nv40_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv44_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv40_instmem_new,
 //     .mc = nv44_mc_new,
@@ -708,7 +708,7 @@ nv4b_chipset = {
        .clk = nv40_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv49_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv40_instmem_new,
 //     .mc = nv40_mc_new,
@@ -733,7 +733,7 @@ nv4c_chipset = {
        .clk = nv40_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv46_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv40_instmem_new,
 //     .mc = nv4c_mc_new,
@@ -758,7 +758,7 @@ nv4e_chipset = {
        .clk = nv40_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv4e_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv4e_i2c_new,
 //     .imem = nv40_instmem_new,
 //     .mc = nv4c_mc_new,
@@ -785,7 +785,7 @@ nv50_chipset = {
        .devinit = nv50_devinit_new,
        .fb = nv50_fb_new,
        .fuse = nv50_fuse_new,
-//     .gpio = nv50_gpio_new,
+       .gpio = nv50_gpio_new,
 //     .i2c = nv50_i2c_new,
 //     .imem = nv50_instmem_new,
 //     .mc = nv50_mc_new,
@@ -811,7 +811,7 @@ nv63_chipset = {
        .clk = nv40_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv46_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv40_instmem_new,
 //     .mc = nv4c_mc_new,
@@ -836,7 +836,7 @@ nv67_chipset = {
        .clk = nv40_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv46_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv40_instmem_new,
 //     .mc = nv4c_mc_new,
@@ -861,7 +861,7 @@ nv68_chipset = {
        .clk = nv40_clk_new,
        .devinit = nv1a_devinit_new,
        .fb = nv46_fb_new,
-//     .gpio = nv10_gpio_new,
+       .gpio = nv10_gpio_new,
 //     .i2c = nv04_i2c_new,
 //     .imem = nv40_instmem_new,
 //     .mc = nv4c_mc_new,
@@ -888,7 +888,7 @@ nv84_chipset = {
        .devinit = g84_devinit_new,
        .fb = g84_fb_new,
        .fuse = nv50_fuse_new,
-//     .gpio = nv50_gpio_new,
+       .gpio = nv50_gpio_new,
 //     .i2c = nv50_i2c_new,
 //     .imem = nv50_instmem_new,
 //     .mc = nv50_mc_new,
@@ -919,7 +919,7 @@ nv86_chipset = {
        .devinit = g84_devinit_new,
        .fb = g84_fb_new,
        .fuse = nv50_fuse_new,
-//     .gpio = nv50_gpio_new,
+       .gpio = nv50_gpio_new,
 //     .i2c = nv50_i2c_new,
 //     .imem = nv50_instmem_new,
 //     .mc = nv50_mc_new,
@@ -950,7 +950,7 @@ nv92_chipset = {
        .devinit = g84_devinit_new,
        .fb = g84_fb_new,
        .fuse = nv50_fuse_new,
-//     .gpio = nv50_gpio_new,
+       .gpio = nv50_gpio_new,
 //     .i2c = nv50_i2c_new,
 //     .imem = nv50_instmem_new,
 //     .mc = nv50_mc_new,
@@ -981,7 +981,7 @@ nv94_chipset = {
        .devinit = g84_devinit_new,
        .fb = g84_fb_new,
        .fuse = nv50_fuse_new,
-//     .gpio = g94_gpio_new,
+       .gpio = g94_gpio_new,
 //     .i2c = g94_i2c_new,
 //     .imem = nv50_instmem_new,
 //     .mc = g94_mc_new,
@@ -1006,7 +1006,7 @@ static const struct nvkm_device_chip
 nv96_chipset = {
        .name = "G96",
        .bios = nvkm_bios_new,
-//     .gpio = g94_gpio_new,
+       .gpio = g94_gpio_new,
 //     .i2c = g94_i2c_new,
        .fuse = nv50_fuse_new,
        .clk = g84_clk_new,
@@ -1037,7 +1037,7 @@ static const struct nvkm_device_chip
 nv98_chipset = {
        .name = "G98",
        .bios = nvkm_bios_new,
-//     .gpio = g94_gpio_new,
+       .gpio = g94_gpio_new,
 //     .i2c = g94_i2c_new,
        .fuse = nv50_fuse_new,
        .clk = g84_clk_new,
@@ -1074,7 +1074,7 @@ nva0_chipset = {
        .devinit = g84_devinit_new,
        .fb = g84_fb_new,
        .fuse = nv50_fuse_new,
-//     .gpio = g94_gpio_new,
+       .gpio = g94_gpio_new,
 //     .i2c = nv50_i2c_new,
 //     .imem = nv50_instmem_new,
 //     .mc = g98_mc_new,
@@ -1105,7 +1105,7 @@ nva3_chipset = {
        .devinit = gt215_devinit_new,
        .fb = gt215_fb_new,
        .fuse = nv50_fuse_new,
-//     .gpio = g94_gpio_new,
+       .gpio = g94_gpio_new,
 //     .i2c = g94_i2c_new,
 //     .imem = nv50_instmem_new,
 //     .mc = g98_mc_new,
@@ -1138,7 +1138,7 @@ nva5_chipset = {
        .devinit = gt215_devinit_new,
        .fb = gt215_fb_new,
        .fuse = nv50_fuse_new,
-//     .gpio = g94_gpio_new,
+       .gpio = g94_gpio_new,
 //     .i2c = g94_i2c_new,
 //     .imem = nv50_instmem_new,
 //     .mc = g98_mc_new,
@@ -1170,7 +1170,7 @@ nva8_chipset = {
        .devinit = gt215_devinit_new,
        .fb = gt215_fb_new,
        .fuse = nv50_fuse_new,
-//     .gpio = g94_gpio_new,
+       .gpio = g94_gpio_new,
 //     .i2c = g94_i2c_new,
 //     .imem = nv50_instmem_new,
 //     .mc = g98_mc_new,
@@ -1202,7 +1202,7 @@ nvaa_chipset = {
        .devinit = g98_devinit_new,
        .fb = mcp77_fb_new,
        .fuse = nv50_fuse_new,
-//     .gpio = g94_gpio_new,
+       .gpio = g94_gpio_new,
 //     .i2c = g94_i2c_new,
 //     .imem = nv50_instmem_new,
 //     .mc = g98_mc_new,
@@ -1233,7 +1233,7 @@ nvac_chipset = {
        .devinit = g98_devinit_new,
        .fb = mcp77_fb_new,
        .fuse = nv50_fuse_new,
-//     .gpio = g94_gpio_new,
+       .gpio = g94_gpio_new,
 //     .i2c = g94_i2c_new,
 //     .imem = nv50_instmem_new,
 //     .mc = g98_mc_new,
@@ -1264,7 +1264,7 @@ nvaf_chipset = {
        .devinit = mcp89_devinit_new,
        .fb = mcp89_fb_new,
        .fuse = nv50_fuse_new,
-//     .gpio = g94_gpio_new,
+       .gpio = g94_gpio_new,
 //     .i2c = g94_i2c_new,
 //     .imem = nv50_instmem_new,
 //     .mc = g98_mc_new,
@@ -1296,7 +1296,7 @@ nvc0_chipset = {
        .devinit = gf100_devinit_new,
        .fb = gf100_fb_new,
        .fuse = gf100_fuse_new,
-//     .gpio = g94_gpio_new,
+       .gpio = g94_gpio_new,
 //     .i2c = g94_i2c_new,
 //     .ibus = gf100_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1331,7 +1331,7 @@ nvc1_chipset = {
        .devinit = gf100_devinit_new,
        .fb = gf100_fb_new,
        .fuse = gf100_fuse_new,
-//     .gpio = g94_gpio_new,
+       .gpio = g94_gpio_new,
 //     .i2c = g94_i2c_new,
 //     .ibus = gf100_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1365,7 +1365,7 @@ nvc3_chipset = {
        .devinit = gf100_devinit_new,
        .fb = gf100_fb_new,
        .fuse = gf100_fuse_new,
-//     .gpio = g94_gpio_new,
+       .gpio = g94_gpio_new,
 //     .i2c = g94_i2c_new,
 //     .ibus = gf100_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1399,7 +1399,7 @@ nvc4_chipset = {
        .devinit = gf100_devinit_new,
        .fb = gf100_fb_new,
        .fuse = gf100_fuse_new,
-//     .gpio = g94_gpio_new,
+       .gpio = g94_gpio_new,
 //     .i2c = g94_i2c_new,
 //     .ibus = gf100_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1434,7 +1434,7 @@ nvc8_chipset = {
        .devinit = gf100_devinit_new,
        .fb = gf100_fb_new,
        .fuse = gf100_fuse_new,
-//     .gpio = g94_gpio_new,
+       .gpio = g94_gpio_new,
 //     .i2c = g94_i2c_new,
 //     .ibus = gf100_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1469,7 +1469,7 @@ nvce_chipset = {
        .devinit = gf100_devinit_new,
        .fb = gf100_fb_new,
        .fuse = gf100_fuse_new,
-//     .gpio = g94_gpio_new,
+       .gpio = g94_gpio_new,
 //     .i2c = g94_i2c_new,
 //     .ibus = gf100_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1504,7 +1504,7 @@ nvcf_chipset = {
        .devinit = gf100_devinit_new,
        .fb = gf100_fb_new,
        .fuse = gf100_fuse_new,
-//     .gpio = g94_gpio_new,
+       .gpio = g94_gpio_new,
 //     .i2c = g94_i2c_new,
 //     .ibus = gf100_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1538,7 +1538,7 @@ nvd7_chipset = {
        .devinit = gf100_devinit_new,
        .fb = gf100_fb_new,
        .fuse = gf100_fuse_new,
-//     .gpio = gf110_gpio_new,
+       .gpio = gf119_gpio_new,
 //     .i2c = gf117_i2c_new,
 //     .ibus = gf100_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1570,7 +1570,7 @@ nvd9_chipset = {
        .devinit = gf100_devinit_new,
        .fb = gf100_fb_new,
        .fuse = gf100_fuse_new,
-//     .gpio = gf110_gpio_new,
+       .gpio = gf119_gpio_new,
 //     .i2c = gf110_i2c_new,
 //     .ibus = gf100_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1604,7 +1604,7 @@ nve4_chipset = {
        .devinit = gf100_devinit_new,
        .fb = gk104_fb_new,
        .fuse = gf100_fuse_new,
-//     .gpio = gk104_gpio_new,
+       .gpio = gk104_gpio_new,
 //     .i2c = gk104_i2c_new,
 //     .ibus = gk104_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1640,7 +1640,7 @@ nve6_chipset = {
        .devinit = gf100_devinit_new,
        .fb = gk104_fb_new,
        .fuse = gf100_fuse_new,
-//     .gpio = gk104_gpio_new,
+       .gpio = gk104_gpio_new,
 //     .i2c = gk104_i2c_new,
 //     .ibus = gk104_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1676,7 +1676,7 @@ nve7_chipset = {
        .devinit = gf100_devinit_new,
        .fb = gk104_fb_new,
        .fuse = gf100_fuse_new,
-//     .gpio = gk104_gpio_new,
+       .gpio = gk104_gpio_new,
 //     .i2c = gk104_i2c_new,
 //     .ibus = gk104_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1736,7 +1736,7 @@ nvf0_chipset = {
        .devinit = gf100_devinit_new,
        .fb = gk104_fb_new,
        .fuse = gf100_fuse_new,
-//     .gpio = gk104_gpio_new,
+       .gpio = gk104_gpio_new,
 //     .i2c = gk104_i2c_new,
 //     .ibus = gk104_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1772,7 +1772,7 @@ nvf1_chipset = {
        .devinit = gf100_devinit_new,
        .fb = gk104_fb_new,
        .fuse = gf100_fuse_new,
-//     .gpio = gk104_gpio_new,
+       .gpio = gk104_gpio_new,
 //     .i2c = gf110_i2c_new,
 //     .ibus = gk104_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1808,7 +1808,7 @@ nv106_chipset = {
        .devinit = gf100_devinit_new,
        .fb = gk104_fb_new,
        .fuse = gf100_fuse_new,
-//     .gpio = gk104_gpio_new,
+       .gpio = gk104_gpio_new,
 //     .i2c = gk104_i2c_new,
 //     .ibus = gk104_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1843,7 +1843,7 @@ nv108_chipset = {
        .devinit = gf100_devinit_new,
        .fb = gk104_fb_new,
        .fuse = gf100_fuse_new,
-//     .gpio = gk104_gpio_new,
+       .gpio = gk104_gpio_new,
 //     .i2c = gk104_i2c_new,
 //     .ibus = gk104_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1878,7 +1878,7 @@ nv117_chipset = {
        .devinit = gm107_devinit_new,
        .fb = gm107_fb_new,
        .fuse = gm107_fuse_new,
-//     .gpio = gk104_gpio_new,
+       .gpio = gk104_gpio_new,
 //     .i2c = gf110_i2c_new,
 //     .ibus = gk104_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1907,7 +1907,7 @@ nv124_chipset = {
        .devinit = gm204_devinit_new,
        .fb = gm107_fb_new,
        .fuse = gm107_fuse_new,
-//     .gpio = gk104_gpio_new,
+       .gpio = gk104_gpio_new,
 //     .i2c = gm204_i2c_new,
 //     .ibus = gk104_ibus_new,
 //     .imem = nv50_instmem_new,
@@ -1936,7 +1936,7 @@ nv126_chipset = {
        .devinit = gm204_devinit_new,
        .fb = gm107_fb_new,
        .fuse = gm107_fuse_new,
-//     .gpio = gk104_gpio_new,
+       .gpio = gk104_gpio_new,
 //     .i2c = gm204_i2c_new,
 //     .ibus = gk104_ibus_new,
 //     .imem = nv50_instmem_new,
index df9e3fbca3df098eac8f49865b7f87d6eb069cbd..9059b43efe7d8a5f8daf30930c2f6e9776b597dd 100644 (file)
@@ -28,7 +28,6 @@ gf100_identify(struct nvkm_device *device)
 {
        switch (device->chipset) {
        case 0xc0:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  g94_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  g94_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gt215_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -53,7 +52,6 @@ gf100_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] = gf100_pm_oclass;
                break;
        case 0xc4:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  g94_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  g94_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gt215_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -78,7 +76,6 @@ gf100_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] = gf100_pm_oclass;
                break;
        case 0xc3:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  g94_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  g94_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gt215_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -102,7 +99,6 @@ gf100_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] = gf100_pm_oclass;
                break;
        case 0xce:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  g94_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  g94_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gt215_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -127,7 +123,6 @@ gf100_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] = gf100_pm_oclass;
                break;
        case 0xcf:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  g94_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  g94_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gt215_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -151,7 +146,6 @@ gf100_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] = gf100_pm_oclass;
                break;
        case 0xc1:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  g94_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  g94_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gt215_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -175,7 +169,6 @@ gf100_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] = gf108_pm_oclass;
                break;
        case 0xc8:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  g94_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  g94_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gt215_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -200,7 +193,6 @@ gf100_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] = gf100_pm_oclass;
                break;
        case 0xd9:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  gf110_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  gf110_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gf110_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -224,7 +216,6 @@ gf100_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] = gf117_pm_oclass;
                break;
        case 0xd7:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  gf110_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  gf117_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gf110_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
index 623810dd095b2ba9598aa83a3d357b76c3ab2bea..89eabad81e83d4909db4475a7a0ac890ea5faefb 100644 (file)
@@ -28,7 +28,6 @@ gk104_identify(struct nvkm_device *device)
 {
        switch (device->chipset) {
        case 0xe4:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  gk104_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  gk104_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gf110_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -54,7 +53,6 @@ gk104_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] = gk104_pm_oclass;
                break;
        case 0xe7:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  gk104_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  gk104_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gf110_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -80,7 +78,6 @@ gk104_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] = gk104_pm_oclass;
                break;
        case 0xe6:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  gk104_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  gk104_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gf110_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -122,7 +119,6 @@ gk104_identify(struct nvkm_device *device)
                device->oclass[NVDEV_SUBDEV_PMU    ] =  gk20a_pmu_oclass;
                break;
        case 0xf0:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  gk104_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  gk104_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gf110_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -148,7 +144,6 @@ gk104_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] = &gk110_pm_oclass;
                break;
        case 0xf1:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  gk104_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  gf110_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gf110_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -174,7 +169,6 @@ gk104_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] = &gk110_pm_oclass;
                break;
        case 0x106:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  gk104_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  gk104_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gf110_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -199,7 +193,6 @@ gk104_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_MSPPP  ] = &gf100_msppp_oclass;
                break;
        case 0x108:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  gk104_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  gk104_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gf110_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
index 038045a7ac8ec58bc62f48f390d28ef114b31132..a57db5f56f6803bf6ac69280687024feb67f5806 100644 (file)
@@ -28,7 +28,6 @@ gm100_identify(struct nvkm_device *device)
 {
        switch (device->chipset) {
        case 0x117:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  gk104_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  gf110_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gm107_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -60,7 +59,6 @@ gm100_identify(struct nvkm_device *device)
 #endif
                break;
        case 0x124:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  gk104_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  gm204_i2c_oclass;
 #if 0
                /* looks to be some non-trivial changes */
@@ -93,7 +91,6 @@ gm100_identify(struct nvkm_device *device)
 #endif
                break;
        case 0x126:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  gk104_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  gm204_i2c_oclass;
 #if 0
                /* looks to be some non-trivial changes */
index dd42f9e64f76a2fe5def0e2e614074844d52c161..ac2994a3fb33ccdd5a61c8cc2b66e5b3218512ee 100644 (file)
@@ -28,7 +28,6 @@ nv10_identify(struct nvkm_device *device)
 {
        switch (device->chipset) {
        case 0x10:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv04_mc_oclass;
                device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
@@ -39,7 +38,6 @@ nv10_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_DISP   ] =  nv04_disp_oclass;
                break;
        case 0x15:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv04_mc_oclass;
                device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
@@ -52,7 +50,6 @@ nv10_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_DISP   ] =  nv04_disp_oclass;
                break;
        case 0x16:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv04_mc_oclass;
                device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
@@ -65,7 +62,6 @@ nv10_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_DISP   ] =  nv04_disp_oclass;
                break;
        case 0x1a:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv04_mc_oclass;
                device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
@@ -78,7 +74,6 @@ nv10_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_DISP   ] =  nv04_disp_oclass;
                break;
        case 0x11:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv04_mc_oclass;
                device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
@@ -91,7 +86,6 @@ nv10_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_DISP   ] =  nv04_disp_oclass;
                break;
        case 0x17:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv04_mc_oclass;
                device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
@@ -104,7 +98,6 @@ nv10_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_DISP   ] =  nv04_disp_oclass;
                break;
        case 0x1f:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv04_mc_oclass;
                device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
@@ -117,7 +110,6 @@ nv10_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_DISP   ] =  nv04_disp_oclass;
                break;
        case 0x18:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv04_mc_oclass;
                device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
index 3e79a02ac687cc3efc4b5490318f82820d994808..80290303606e7f5f7c8aabe2efa5ca81c7e3b369 100644 (file)
@@ -28,7 +28,6 @@ nv20_identify(struct nvkm_device *device)
 {
        switch (device->chipset) {
        case 0x20:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv04_mc_oclass;
                device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
@@ -41,7 +40,6 @@ nv20_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_DISP   ] =  nv04_disp_oclass;
                break;
        case 0x25:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv04_mc_oclass;
                device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
@@ -54,7 +52,6 @@ nv20_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_DISP   ] =  nv04_disp_oclass;
                break;
        case 0x28:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv04_mc_oclass;
                device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
@@ -67,7 +64,6 @@ nv20_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_DISP   ] =  nv04_disp_oclass;
                break;
        case 0x2a:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv04_mc_oclass;
                device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
index b045515a49037c669f5f74def60e1652c05a9b04..ce66504d1f3edcdcd7f9e680776f03bca09bad4b 100644 (file)
@@ -28,7 +28,6 @@ nv30_identify(struct nvkm_device *device)
 {
        switch (device->chipset) {
        case 0x30:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv04_mc_oclass;
                device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
@@ -41,7 +40,6 @@ nv30_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_DISP   ] =  nv04_disp_oclass;
                break;
        case 0x35:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv04_mc_oclass;
                device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
@@ -54,7 +52,6 @@ nv30_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_DISP   ] =  nv04_disp_oclass;
                break;
        case 0x31:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv04_mc_oclass;
                device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
@@ -68,7 +65,6 @@ nv30_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_DISP   ] =  nv04_disp_oclass;
                break;
        case 0x36:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv04_mc_oclass;
                device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
@@ -82,7 +78,6 @@ nv30_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_DISP   ] =  nv04_disp_oclass;
                break;
        case 0x34:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv04_mc_oclass;
                device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
index 430707755ffa14604761282201dbd82bb26c8ce9..513fb7eea165ae14a3462c82c5e9c6d9a0bf4daf 100644 (file)
@@ -28,7 +28,6 @@ nv40_identify(struct nvkm_device *device)
 {
        switch (device->chipset) {
        case 0x40:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &nv40_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv40_mc_oclass;
@@ -45,7 +44,6 @@ nv40_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  nv40_pm_oclass;
                break;
        case 0x41:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &nv40_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv40_mc_oclass;
@@ -62,7 +60,6 @@ nv40_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  nv40_pm_oclass;
                break;
        case 0x42:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &nv40_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv40_mc_oclass;
@@ -79,7 +76,6 @@ nv40_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  nv40_pm_oclass;
                break;
        case 0x43:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &nv40_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv40_mc_oclass;
@@ -96,7 +92,6 @@ nv40_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  nv40_pm_oclass;
                break;
        case 0x45:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &nv40_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv40_mc_oclass;
@@ -113,7 +108,6 @@ nv40_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  nv40_pm_oclass;
                break;
        case 0x47:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &nv40_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv40_mc_oclass;
@@ -130,7 +124,6 @@ nv40_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  nv40_pm_oclass;
                break;
        case 0x49:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &nv40_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv40_mc_oclass;
@@ -147,7 +140,6 @@ nv40_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  nv40_pm_oclass;
                break;
        case 0x4b:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &nv40_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv40_mc_oclass;
@@ -164,7 +156,6 @@ nv40_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  nv40_pm_oclass;
                break;
        case 0x44:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &nv40_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv44_mc_oclass;
@@ -181,7 +172,6 @@ nv40_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  nv40_pm_oclass;
                break;
        case 0x46:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &nv40_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv4c_mc_oclass;
@@ -198,7 +188,6 @@ nv40_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  nv40_pm_oclass;
                break;
        case 0x4a:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &nv40_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv44_mc_oclass;
@@ -215,7 +204,6 @@ nv40_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  nv40_pm_oclass;
                break;
        case 0x4c:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &nv40_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv4c_mc_oclass;
@@ -232,7 +220,6 @@ nv40_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  nv40_pm_oclass;
                break;
        case 0x4e:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv4e_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &nv40_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv4c_mc_oclass;
@@ -249,7 +236,6 @@ nv40_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  nv40_pm_oclass;
                break;
        case 0x63:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &nv40_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv4c_mc_oclass;
@@ -266,7 +252,6 @@ nv40_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  nv40_pm_oclass;
                break;
        case 0x67:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &nv40_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv4c_mc_oclass;
@@ -283,7 +268,6 @@ nv40_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  nv40_pm_oclass;
                break;
        case 0x68:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv10_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv04_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &nv40_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MC     ] =  nv4c_mc_oclass;
index 095f3c3f8c3f85e9cf17b137de5e019c49cb00df..cf8839c1d1f05f14cfde4d8bb6a2f32d72a59f30 100644 (file)
@@ -28,7 +28,6 @@ nv50_identify(struct nvkm_device *device)
 {
        switch (device->chipset) {
        case 0x50:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv50_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv50_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &nv50_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -46,7 +45,6 @@ nv50_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  nv50_pm_oclass;
                break;
        case 0x84:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv50_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv50_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &g84_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -67,7 +65,6 @@ nv50_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  g84_pm_oclass;
                break;
        case 0x86:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv50_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv50_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &g84_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -88,7 +85,6 @@ nv50_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  g84_pm_oclass;
                break;
        case 0x92:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv50_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv50_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &g84_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -109,7 +105,6 @@ nv50_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  g84_pm_oclass;
                break;
        case 0x94:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  g94_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  g94_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &g84_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -130,7 +125,6 @@ nv50_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  g84_pm_oclass;
                break;
        case 0x96:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  g94_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  g94_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &g84_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -151,7 +145,6 @@ nv50_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  g84_pm_oclass;
                break;
        case 0x98:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  g94_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  g94_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &g84_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -172,7 +165,6 @@ nv50_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  g84_pm_oclass;
                break;
        case 0xa0:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  g94_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  nv50_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &g84_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -193,7 +185,6 @@ nv50_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  gt200_pm_oclass;
                break;
        case 0xaa:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  g94_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  g94_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &g84_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -214,7 +205,6 @@ nv50_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  g84_pm_oclass;
                break;
        case 0xac:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  g94_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  g94_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &g84_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -235,7 +225,6 @@ nv50_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  g84_pm_oclass;
                break;
        case 0xa3:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  g94_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  g94_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gt215_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -258,7 +247,6 @@ nv50_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  gt215_pm_oclass;
                break;
        case 0xa5:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  g94_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  g94_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gt215_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -280,7 +268,6 @@ nv50_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  gt215_pm_oclass;
                break;
        case 0xa8:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  g94_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  g94_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gt215_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
@@ -302,7 +289,6 @@ nv50_identify(struct nvkm_device *device)
                device->oclass[NVDEV_ENGINE_PM     ] =  gt215_pm_oclass;
                break;
        case 0xaf:
-               device->oclass[NVDEV_SUBDEV_GPIO   ] =  g94_gpio_oclass;
                device->oclass[NVDEV_SUBDEV_I2C    ] =  g94_i2c_oclass;
                device->oclass[NVDEV_SUBDEV_THERM  ] = &gt215_therm_oclass;
                device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
index 2eb55be056d9b0cd820e0a56143764a2ebf71cf6..c6910d644a3d58454539a640a6823b07e7b635bc 100644 (file)
@@ -41,7 +41,7 @@ nvkm_connector_hpd(struct nvkm_notify *notify)
 
        CONN_DBG(conn, "HPD: %d", line->mask);
 
-       if (!gpio->get(gpio, 0, DCB_GPIO_UNUSED, conn->hpd.index))
+       if (!nvkm_gpio_get(gpio, 0, DCB_GPIO_UNUSED, conn->hpd.index))
                rep.mask = NVIF_NOTIFY_CONN_V0_UNPLUG;
        else
                rep.mask = NVIF_NOTIFY_CONN_V0_PLUG;
@@ -98,7 +98,7 @@ nvkm_connector_ctor(struct nvkm_disp *disp, int index,
                }
                info->hpd = hpd[info->hpd];
 
-               ret = gpio->find(gpio, 0, info->hpd, DCB_GPIO_UNUSED, &func);
+               ret = nvkm_gpio_find(gpio, 0, info->hpd, DCB_GPIO_UNUSED, &func);
                if (ret) {
                        CONN_ERR(conn, "func %02x lookup failed, %d",
                                 info->hpd, ret);
index a50b027cf7030ad7a9b342ecc73ce0fcdb6cbe3f..65af31441e9c29496647084d927c11f393974653 100644 (file)
@@ -1933,8 +1933,8 @@ init_gpio(struct nvbios_init *init)
        trace("GPIO\n");
        init->offset += 1;
 
-       if (init_exec(init) && gpio && gpio->reset)
-               gpio->reset(gpio, DCB_GPIO_UNUSED);
+       if (init_exec(init))
+               nvkm_gpio_reset(gpio, DCB_GPIO_UNUSED);
 }
 
 /**
@@ -2179,8 +2179,8 @@ init_gpio_ne(struct nvbios_init *init)
                        trace("\tFUNC[0x%02x]", func.func);
                        if (i == (init->offset + count)) {
                                cont(" *");
-                               if (init_exec(init) && gpio && gpio->reset)
-                                       gpio->reset(gpio, func.func);
+                               if (init_exec(init))
+                                       nvkm_gpio_reset(gpio, func.func);
                        }
                        cont("\n");
                }
index b4306824f7a458bb543eb4610ecadce51f067de4..989355622aac8085f4e5250245baf8518b41765f 100644 (file)
@@ -1522,14 +1522,14 @@ gk104_ram_new(struct nvkm_fb *fb, struct nvkm_ram **pram)
        }
 
        /* lookup memory voltage gpios */
-       ret = gpio->find(gpio, 0, 0x18, DCB_GPIO_UNUSED, &func);
+       ret = nvkm_gpio_find(gpio, 0, 0x18, DCB_GPIO_UNUSED, &func);
        if (ret == 0) {
                ram->fuc.r_gpioMV = ramfuc_reg(0x00d610 + (func.line * 0x04));
                ram->fuc.r_funcMV[0] = (func.log[0] ^ 2) << 12;
                ram->fuc.r_funcMV[1] = (func.log[1] ^ 2) << 12;
        }
 
-       ret = gpio->find(gpio, 0, 0x2e, DCB_GPIO_UNUSED, &func);
+       ret = nvkm_gpio_find(gpio, 0, 0x2e, DCB_GPIO_UNUSED, &func);
        if (ret == 0) {
                ram->fuc.r_gpio2E = ramfuc_reg(0x00d610 + (func.line * 0x04));
                ram->fuc.r_func2E[0] = (func.log[0] ^ 2) << 12;
index a70219cc0a4ba16b29541295254694b0365e4cbb..5c08ae8023fa62f15b41110ded9118033942576e 100644 (file)
@@ -468,13 +468,13 @@ gt215_ram_lock_pll(struct gt215_ramfuc *fuc, struct gt215_clk_info *mclk)
 static void
 gt215_ram_fbvref(struct gt215_ramfuc *fuc, u32 val)
 {
-       struct nvkm_gpio *gpio = nvkm_gpio(fuc->base.fb);
+       struct nvkm_gpio *gpio = fuc->base.fb->subdev.device->gpio;
        struct dcb_gpio_func func;
        u32 reg, sh, gpio_val;
        int ret;
 
-       if (gpio->get(gpio, 0, 0x2e, DCB_GPIO_UNUSED) != val) {
-               ret = gpio->find(gpio, 0, 0x2e, DCB_GPIO_UNUSED, &func);
+       if (nvkm_gpio_get(gpio, 0, 0x2e, DCB_GPIO_UNUSED) != val) {
+               ret = nvkm_gpio_find(gpio, 0, 0x2e, DCB_GPIO_UNUSED, &func);
                if (ret)
                        return;
 
@@ -982,7 +982,7 @@ gt215_ram_new(struct nvkm_fb *fb, struct nvkm_ram **pram)
                ram->fuc.r_mr[3] = ramfuc_reg(0x1002e4);
        }
 
-       ret = gpio->find(gpio, 0, 0x2e, DCB_GPIO_UNUSED, &func);
+       ret = nvkm_gpio_find(gpio, 0, 0x2e, DCB_GPIO_UNUSED, &func);
        if (ret == 0) {
                nv50_gpio_location(func.line, &reg, &shift);
                ram->fuc.r_gpioFBVREF = ramfuc_reg(reg);
index ea42a9ed18214a849f3b2e28b3851f23ddc18273..e52c5e87f242faf166bcad8c165c120d66a613fd 100644 (file)
@@ -2,5 +2,5 @@ nvkm-y += nvkm/subdev/gpio/base.o
 nvkm-y += nvkm/subdev/gpio/nv10.o
 nvkm-y += nvkm/subdev/gpio/nv50.o
 nvkm-y += nvkm/subdev/gpio/g94.o
-nvkm-y += nvkm/subdev/gpio/gf110.o
+nvkm-y += nvkm/subdev/gpio/gf119.o
 nvkm-y += nvkm/subdev/gpio/gk104.o
index faeb2041f6085bd9685d2f94ef47339cc8a4454e..516a06b6b66abb227fe54a68205394b4c73692f4 100644 (file)
 static int
 nvkm_gpio_drive(struct nvkm_gpio *gpio, int idx, int line, int dir, int out)
 {
-       const struct nvkm_gpio_impl *impl = (void *)nv_object(gpio)->oclass;
-       return impl->drive ? impl->drive(gpio, line, dir, out) : -ENODEV;
+       return gpio->func->drive(gpio, line, dir, out);
 }
 
 static int
 nvkm_gpio_sense(struct nvkm_gpio *gpio, int idx, int line)
 {
-       const struct nvkm_gpio_impl *impl = (void *)nv_object(gpio)->oclass;
-       return impl->sense ? impl->sense(gpio, line) : -ENODEV;
+       return gpio->func->sense(gpio, line);
 }
 
-static int
+void
+nvkm_gpio_reset(struct nvkm_gpio *gpio, u8 func)
+{
+       if (gpio->func->reset)
+               gpio->func->reset(gpio, func);
+}
+
+int
 nvkm_gpio_find(struct nvkm_gpio *gpio, int idx, u8 tag, u8 line,
               struct dcb_gpio_func *func)
 {
@@ -71,7 +76,7 @@ nvkm_gpio_find(struct nvkm_gpio *gpio, int idx, u8 tag, u8 line,
        return -ENOENT;
 }
 
-static int
+int
 nvkm_gpio_set(struct nvkm_gpio *gpio, int idx, u8 tag, u8 line, int state)
 {
        struct dcb_gpio_func func;
@@ -87,7 +92,7 @@ nvkm_gpio_set(struct nvkm_gpio *gpio, int idx, u8 tag, u8 line, int state)
        return ret;
 }
 
-static int
+int
 nvkm_gpio_get(struct nvkm_gpio *gpio, int idx, u8 tag, u8 line)
 {
        struct dcb_gpio_func func;
@@ -107,16 +112,14 @@ static void
 nvkm_gpio_intr_fini(struct nvkm_event *event, int type, int index)
 {
        struct nvkm_gpio *gpio = container_of(event, typeof(*gpio), event);
-       const struct nvkm_gpio_impl *impl = (void *)nv_object(gpio)->oclass;
-       impl->intr_mask(gpio, type, 1 << index, 0);
+       gpio->func->intr_mask(gpio, type, 1 << index, 0);
 }
 
 static void
 nvkm_gpio_intr_init(struct nvkm_event *event, int type, int index)
 {
        struct nvkm_gpio *gpio = container_of(event, typeof(*gpio), event);
-       const struct nvkm_gpio_impl *impl = (void *)nv_object(gpio)->oclass;
-       impl->intr_mask(gpio, type, 1 << index, 1 << index);
+       gpio->func->intr_mask(gpio, type, 1 << index, 1 << index);
 }
 
 static int
@@ -133,16 +136,22 @@ nvkm_gpio_intr_ctor(struct nvkm_object *object, void *data, u32 size,
        return -EINVAL;
 }
 
+static const struct nvkm_event_func
+nvkm_gpio_intr_func = {
+       .ctor = nvkm_gpio_intr_ctor,
+       .init = nvkm_gpio_intr_init,
+       .fini = nvkm_gpio_intr_fini,
+};
+
 static void
 nvkm_gpio_intr(struct nvkm_subdev *subdev)
 {
        struct nvkm_gpio *gpio = nvkm_gpio(subdev);
-       const struct nvkm_gpio_impl *impl = (void *)nv_object(gpio)->oclass;
        u32 hi, lo, i;
 
-       impl->intr_stat(gpio, &hi, &lo);
+       gpio->func->intr_stat(gpio, &hi, &lo);
 
-       for (i = 0; (hi | lo) && i < impl->lines; i++) {
+       for (i = 0; (hi | lo) && i < gpio->func->lines; i++) {
                struct nvkm_gpio_ntfy_rep rep = {
                        .mask = (NVKM_GPIO_HI * !!(hi & (1 << i))) |
                                (NVKM_GPIO_LO * !!(lo & (1 << i))),
@@ -151,24 +160,15 @@ nvkm_gpio_intr(struct nvkm_subdev *subdev)
        }
 }
 
-static const struct nvkm_event_func
-nvkm_gpio_intr_func = {
-       .ctor = nvkm_gpio_intr_ctor,
-       .init = nvkm_gpio_intr_init,
-       .fini = nvkm_gpio_intr_fini,
-};
-
-int
-_nvkm_gpio_fini(struct nvkm_object *object, bool suspend)
+static int
+nvkm_gpio_fini(struct nvkm_subdev *subdev, bool suspend)
 {
-       const struct nvkm_gpio_impl *impl = (void *)object->oclass;
-       struct nvkm_gpio *gpio = nvkm_gpio(object);
-       u32 mask = (1 << impl->lines) - 1;
-
-       impl->intr_mask(gpio, NVKM_GPIO_TOGGLED, mask, 0);
-       impl->intr_stat(gpio, &mask, &mask);
+       struct nvkm_gpio *gpio = nvkm_gpio(subdev);
+       u32 mask = (1 << gpio->func->lines) - 1;
 
-       return nvkm_subdev_fini_old(&gpio->subdev, suspend);
+       gpio->func->intr_mask(gpio, NVKM_GPIO_TOGGLED, mask, 0);
+       gpio->func->intr_stat(gpio, &mask, &mask);
+       return 0;
 }
 
 static struct dmi_system_id gpio_reset_ids[] = {
@@ -182,70 +182,43 @@ static struct dmi_system_id gpio_reset_ids[] = {
        { }
 };
 
-int
-_nvkm_gpio_init(struct nvkm_object *object)
+static int
+nvkm_gpio_init(struct nvkm_subdev *subdev)
 {
-       struct nvkm_gpio *gpio = nvkm_gpio(object);
-       int ret;
-
-       ret = nvkm_subdev_init_old(&gpio->subdev);
-       if (ret)
-               return ret;
-
-       if (gpio->reset && dmi_check_system(gpio_reset_ids))
-               gpio->reset(gpio, DCB_GPIO_UNUSED);
-
-       return ret;
+       struct nvkm_gpio *gpio = nvkm_gpio(subdev);
+       if (dmi_check_system(gpio_reset_ids))
+               nvkm_gpio_reset(gpio, DCB_GPIO_UNUSED);
+       return 0;
 }
 
-void
-_nvkm_gpio_dtor(struct nvkm_object *object)
+static void *
+nvkm_gpio_dtor(struct nvkm_subdev *subdev)
 {
-       struct nvkm_gpio *gpio = (void *)object;
+       struct nvkm_gpio *gpio = nvkm_gpio(subdev);
        nvkm_event_fini(&gpio->event);
-       nvkm_subdev_destroy(&gpio->subdev);
+       return gpio;
 }
 
-int
-nvkm_gpio_create_(struct nvkm_object *parent, struct nvkm_object *engine,
-                 struct nvkm_oclass *oclass, int length, void **pobject)
-{
-       const struct nvkm_gpio_impl *impl = (void *)oclass;
-       struct nvkm_gpio *gpio;
-       int ret;
-
-       ret = nvkm_subdev_create_(parent, engine, oclass, 0, "GPIO",
-                                 "gpio", length, pobject);
-       gpio = *pobject;
-       if (ret)
-               return ret;
-
-       gpio->find = nvkm_gpio_find;
-       gpio->set  = nvkm_gpio_set;
-       gpio->get  = nvkm_gpio_get;
-       gpio->reset = impl->reset;
-
-       ret = nvkm_event_init(&nvkm_gpio_intr_func, 2, impl->lines,
-                             &gpio->event);
-       if (ret)
-               return ret;
-
-       nv_subdev(gpio)->intr = nvkm_gpio_intr;
-       return 0;
-}
+static const struct nvkm_subdev_func
+nvkm_gpio = {
+       .dtor = nvkm_gpio_dtor,
+       .init = nvkm_gpio_init,
+       .fini = nvkm_gpio_fini,
+       .intr = nvkm_gpio_intr,
+};
 
 int
-_nvkm_gpio_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
-               struct nvkm_oclass *oclass, void *data, u32 size,
-               struct nvkm_object **pobject)
+nvkm_gpio_new_(const struct nvkm_gpio_func *func, struct nvkm_device *device,
+              int index, struct nvkm_gpio **pgpio)
 {
        struct nvkm_gpio *gpio;
-       int ret;
 
-       ret = nvkm_gpio_create(parent, engine, oclass, &gpio);
-       *pobject = nv_object(gpio);
-       if (ret)
-               return ret;
+       if (!(gpio = *pgpio = kzalloc(sizeof(*gpio), GFP_KERNEL)))
+               return -ENOMEM;
 
-       return 0;
+       nvkm_subdev_ctor(&nvkm_gpio, device, index, 0, &gpio->subdev);
+       gpio->func = func;
+
+       return nvkm_event_init(&nvkm_gpio_intr_func, 2, func->lines,
+                              &gpio->event);
 }
index 939f6b953dddee241121dae159328f49bd4f500d..6dcda55fb8655fc77e4077904fb02fdbb7ab7c78 100644 (file)
@@ -57,19 +57,18 @@ g94_gpio_intr_mask(struct nvkm_gpio *gpio, u32 type, u32 mask, u32 data)
        nvkm_wr32(device, 0x00e070, inte1);
 }
 
-struct nvkm_oclass *
-g94_gpio_oclass = &(struct nvkm_gpio_impl) {
-       .base.handle = NV_SUBDEV(GPIO, 0x94),
-       .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
+g94_gpio = {
        .lines = 32,
        .intr_stat = g94_gpio_intr_stat,
        .intr_mask = g94_gpio_intr_mask,
        .drive = nv50_gpio_drive,
        .sense = nv50_gpio_sense,
        .reset = nv50_gpio_reset,
-}.base;
+};
+
+int
+g94_gpio_new(struct nvkm_device *device, int index, struct nvkm_gpio **pgpio)
+{
+       return nvkm_gpio_new_(&g94_gpio, device, index, pgpio);
+}
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gf110.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gf110.c
deleted file mode 100644 (file)
index a5aae48..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 2012 Red Hat Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: Ben Skeggs
- */
-#include "priv.h"
-
-void
-gf110_gpio_reset(struct nvkm_gpio *gpio, u8 match)
-{
-       struct nvkm_device *device = gpio->subdev.device;
-       struct nvkm_bios *bios = device->bios;
-       u8 ver, len;
-       u16 entry;
-       int ent = -1;
-
-       while ((entry = dcb_gpio_entry(bios, 0, ++ent, &ver, &len))) {
-               u32 data = nvbios_rd32(bios, entry);
-               u8  line =   (data & 0x0000003f);
-               u8  defs = !!(data & 0x00000080);
-               u8  func =   (data & 0x0000ff00) >> 8;
-               u8  unk0 =   (data & 0x00ff0000) >> 16;
-               u8  unk1 =   (data & 0x1f000000) >> 24;
-
-               if ( func  == DCB_GPIO_UNUSED ||
-                   (match != DCB_GPIO_UNUSED && match != func))
-                       continue;
-
-               gpio->set(gpio, 0, func, line, defs);
-
-               nvkm_mask(device, 0x00d610 + (line * 4), 0xff, unk0);
-               if (unk1--)
-                       nvkm_mask(device, 0x00d740 + (unk1 * 4), 0xff, line);
-       }
-}
-
-int
-gf110_gpio_drive(struct nvkm_gpio *gpio, int line, int dir, int out)
-{
-       struct nvkm_device *device = gpio->subdev.device;
-       u32 data = ((dir ^ 1) << 13) | (out << 12);
-       nvkm_mask(device, 0x00d610 + (line * 4), 0x00003000, data);
-       nvkm_mask(device, 0x00d604, 0x00000001, 0x00000001); /* update? */
-       return 0;
-}
-
-int
-gf110_gpio_sense(struct nvkm_gpio *gpio, int line)
-{
-       struct nvkm_device *device = gpio->subdev.device;
-       return !!(nvkm_rd32(device, 0x00d610 + (line * 4)) & 0x00004000);
-}
-
-struct nvkm_oclass *
-gf110_gpio_oclass = &(struct nvkm_gpio_impl) {
-       .base.handle = NV_SUBDEV(GPIO, 0xd0),
-       .base.ofuncs = &(struct nvkm_ofuncs) {
-               .ctor = _nvkm_gpio_ctor,
-               .dtor = _nvkm_gpio_dtor,
-               .init = _nvkm_gpio_init,
-               .fini = _nvkm_gpio_fini,
-       },
-       .lines = 32,
-       .intr_stat = g94_gpio_intr_stat,
-       .intr_mask = g94_gpio_intr_mask,
-       .drive = gf110_gpio_drive,
-       .sense = gf110_gpio_sense,
-       .reset = gf110_gpio_reset,
-}.base;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gf119.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gf119.c
new file mode 100644 (file)
index 0000000..bb7400d
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2012 Red Hat Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: Ben Skeggs
+ */
+#include "priv.h"
+
+void
+gf119_gpio_reset(struct nvkm_gpio *gpio, u8 match)
+{
+       struct nvkm_device *device = gpio->subdev.device;
+       struct nvkm_bios *bios = device->bios;
+       u8 ver, len;
+       u16 entry;
+       int ent = -1;
+
+       while ((entry = dcb_gpio_entry(bios, 0, ++ent, &ver, &len))) {
+               u32 data = nvbios_rd32(bios, entry);
+               u8  line =   (data & 0x0000003f);
+               u8  defs = !!(data & 0x00000080);
+               u8  func =   (data & 0x0000ff00) >> 8;
+               u8  unk0 =   (data & 0x00ff0000) >> 16;
+               u8  unk1 =   (data & 0x1f000000) >> 24;
+
+               if ( func  == DCB_GPIO_UNUSED ||
+                   (match != DCB_GPIO_UNUSED && match != func))
+                       continue;
+
+               nvkm_gpio_set(gpio, 0, func, line, defs);
+
+               nvkm_mask(device, 0x00d610 + (line * 4), 0xff, unk0);
+               if (unk1--)
+                       nvkm_mask(device, 0x00d740 + (unk1 * 4), 0xff, line);
+       }
+}
+
+int
+gf119_gpio_drive(struct nvkm_gpio *gpio, int line, int dir, int out)
+{
+       struct nvkm_device *device = gpio->subdev.device;
+       u32 data = ((dir ^ 1) << 13) | (out << 12);
+       nvkm_mask(device, 0x00d610 + (line * 4), 0x00003000, data);
+       nvkm_mask(device, 0x00d604, 0x00000001, 0x00000001); /* update? */
+       return 0;
+}
+
+int
+gf119_gpio_sense(struct nvkm_gpio *gpio, int line)
+{
+       struct nvkm_device *device = gpio->subdev.device;
+       return !!(nvkm_rd32(device, 0x00d610 + (line * 4)) & 0x00004000);
+}
+
+static const struct nvkm_gpio_func
+gf119_gpio = {
+       .lines = 32,
+       .intr_stat = g94_gpio_intr_stat,
+       .intr_mask = g94_gpio_intr_mask,
+       .drive = gf119_gpio_drive,
+       .sense = gf119_gpio_sense,
+       .reset = gf119_gpio_reset,
+};
+
+int
+gf119_gpio_new(struct nvkm_device *device, int index, struct nvkm_gpio **pgpio)
+{
+       return nvkm_gpio_new_(&gf119_gpio, device, index, pgpio);
+}
index e8e433cff17d298f6b3ea979058e9ff06d5445bd..3f45afd17d5a683dce70f84017cb7da240514fcd 100644 (file)
@@ -57,19 +57,18 @@ gk104_gpio_intr_mask(struct nvkm_gpio *gpio, u32 type, u32 mask, u32 data)
        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);
+}
index b88cabcc28d7c816659a2e75588b49ece188c89e..ae3499b48330d5b1ac70a77f4355403f45bc8390 100644 (file)
@@ -102,18 +102,17 @@ nv10_gpio_intr_mask(struct nvkm_gpio *gpio, u32 type, u32 mask, u32 data)
        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);
+}
index 4689836059b937daee79cbee498871bef692a4a3..8996649209ab13157df66f9bad629bae3e3fd1c7 100644 (file)
@@ -48,7 +48,7 @@ nv50_gpio_reset(struct nvkm_gpio *gpio, u8 match)
                    (match != DCB_GPIO_UNUSED && match != func))
                        continue;
 
-               gpio->set(gpio, 0, func, line, defs);
+               nvkm_gpio_set(gpio, 0, func, line, defs);
 
                nvkm_mask(device, reg, 0x00010001 << lsh, val << lsh);
        }
@@ -115,19 +115,18 @@ nv50_gpio_intr_mask(struct nvkm_gpio *gpio, u32 type, u32 mask, u32 data)
        nvkm_wr32(device, 0x00e050, inte);
 }
 
-struct nvkm_oclass *
-nv50_gpio_oclass = &(struct nvkm_gpio_impl) {
-       .base.handle = NV_SUBDEV(GPIO, 0x50),
-       .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
+nv50_gpio = {
        .lines = 16,
        .intr_stat = nv50_gpio_intr_stat,
        .intr_mask = nv50_gpio_intr_mask,
        .drive = nv50_gpio_drive,
        .sense = nv50_gpio_sense,
        .reset = nv50_gpio_reset,
-}.base;
+};
+
+int
+nv50_gpio_new(struct nvkm_device *device, int index, struct nvkm_gpio **pgpio)
+{
+       return nvkm_gpio_new_(&nv50_gpio, device, index, pgpio);
+}
index 382f8d44e140cba92e5c0aae0f0da40f77a76be2..371bcdbbe0d67b9d2c247f26a2c5b6be78d10028 100644 (file)
@@ -1,33 +1,9 @@
 #ifndef __NVKM_GPIO_PRIV_H__
 #define __NVKM_GPIO_PRIV_H__
+#define nvkm_gpio(p) container_of((p), struct nvkm_gpio, subdev)
 #include <subdev/gpio.h>
 
-#define nvkm_gpio_create(p,e,o,d)                                           \
-       nvkm_gpio_create_((p), (e), (o), sizeof(**d), (void **)d)
-#define nvkm_gpio_destroy(p) ({                                             \
-       struct nvkm_gpio *gpio = (p);                                       \
-       _nvkm_gpio_dtor(nv_object(gpio));                                   \
-})
-#define nvkm_gpio_init(p) ({                                                \
-       struct nvkm_gpio *gpio = (p);                                       \
-       _nvkm_gpio_init(nv_object(gpio));                                   \
-})
-#define nvkm_gpio_fini(p,s) ({                                              \
-       struct nvkm_gpio *gpio = (p);                                       \
-       _nvkm_gpio_fini(nv_object(gpio), (s));                              \
-})
-
-int  nvkm_gpio_create_(struct nvkm_object *, struct nvkm_object *,
-                         struct nvkm_oclass *, int, void **);
-int  _nvkm_gpio_ctor(struct nvkm_object *, struct nvkm_object *,
-                       struct nvkm_oclass *, void *, u32,
-                       struct nvkm_object **);
-void _nvkm_gpio_dtor(struct nvkm_object *);
-int  _nvkm_gpio_init(struct nvkm_object *);
-int  _nvkm_gpio_fini(struct nvkm_object *, bool);
-
-struct nvkm_gpio_impl {
-       struct nvkm_oclass base;
+struct nvkm_gpio_func {
        int lines;
 
        /* read and ack pending interrupts, returning only data
@@ -51,6 +27,9 @@ struct nvkm_gpio_impl {
        void (*reset)(struct nvkm_gpio *, u8);
 };
 
+int nvkm_gpio_new_(const struct nvkm_gpio_func *, struct nvkm_device *,
+                  int index, struct nvkm_gpio **);
+
 void nv50_gpio_reset(struct nvkm_gpio *, u8);
 int  nv50_gpio_drive(struct nvkm_gpio *, int, int, int);
 int  nv50_gpio_sense(struct nvkm_gpio *, int);
@@ -58,7 +37,7 @@ int  nv50_gpio_sense(struct nvkm_gpio *, int);
 void g94_gpio_intr_stat(struct nvkm_gpio *, u32 *, u32 *);
 void g94_gpio_intr_mask(struct nvkm_gpio *, u32, u32, u32);
 
-void gf110_gpio_reset(struct nvkm_gpio *, u8);
-int  gf110_gpio_drive(struct nvkm_gpio *, int, int, int);
-int  gf110_gpio_sense(struct nvkm_gpio *, int);
+void gf119_gpio_reset(struct nvkm_gpio *, u8);
+int  gf119_gpio_drive(struct nvkm_gpio *, int, int, int);
+int  gf119_gpio_sense(struct nvkm_gpio *, int);
 #endif
index 43fff761a177724cc92f632ea50f342f1bef9bb8..e017607673a56420aad206e05380763a07c18ead 100644 (file)
@@ -126,8 +126,9 @@ int
 nvkm_therm_fan_sense(struct nvkm_therm *obj)
 {
        struct nvkm_therm_priv *therm = container_of(obj, typeof(*therm), base);
-       struct nvkm_timer *tmr = nvkm_timer(therm);
-       struct nvkm_gpio *gpio = nvkm_gpio(therm);
+       struct nvkm_device *device = therm->base.subdev.device;
+       struct nvkm_timer *tmr = device->timer;
+       struct nvkm_gpio *gpio = device->gpio;
        u32 cycles, cur, prev;
        u64 start, end, tach;
 
@@ -139,12 +140,14 @@ nvkm_therm_fan_sense(struct nvkm_therm *obj)
         * We get 4 changes (0 -> 1 -> 0 -> 1) per complete rotation.
         */
        start = tmr->read(tmr);
-       prev = gpio->get(gpio, 0, therm->fan->tach.func, therm->fan->tach.line);
+       prev = nvkm_gpio_get(gpio, 0, therm->fan->tach.func,
+                                     therm->fan->tach.line);
        cycles = 0;
        do {
                usleep_range(500, 1000); /* supports 0 < rpm < 7500 */
 
-               cur = gpio->get(gpio, 0, therm->fan->tach.func, therm->fan->tach.line);
+               cur = nvkm_gpio_get(gpio, 0, therm->fan->tach.func,
+                                            therm->fan->tach.line);
                if (prev != cur) {
                        if (!start)
                                start = tmr->read(tmr);
@@ -237,7 +240,7 @@ nvkm_therm_fan_ctor(struct nvkm_therm *obj)
        int ret;
 
        /* attempt to locate a drivable fan, and determine control method */
-       ret = gpio->find(gpio, 0, DCB_GPIO_FAN, 0xff, &func);
+       ret = nvkm_gpio_find(gpio, 0, DCB_GPIO_FAN, 0xff, &func);
        if (ret == 0) {
                /* FIXME: is this really the place to perform such checks ? */
                if (func.line != 16 && func.log[0] & DCB_GPIO_LOG_DIR_IN) {
@@ -263,7 +266,8 @@ nvkm_therm_fan_ctor(struct nvkm_therm *obj)
        therm->fan->percent = nvkm_therm_fan_get(&therm->base);
 
        /* attempt to detect a tachometer connection */
-       ret = gpio->find(gpio, 0, DCB_GPIO_FAN_SENSE, 0xff, &therm->fan->tach);
+       ret = nvkm_gpio_find(gpio, 0, DCB_GPIO_FAN_SENSE, 0xff,
+                            &therm->fan->tach);
        if (ret)
                therm->fan->tach.func = DCB_GPIO_UNUSED;
 
index ac4847f2912d015135b2e260ed179075224a6ac2..944b7905b4a5972eb215a9e5396844a6dd04990c 100644 (file)
@@ -39,8 +39,9 @@ nvkm_fanpwm_get(struct nvkm_therm *obj)
 {
        struct nvkm_therm_priv *therm = container_of(obj, typeof(*therm), base);
        struct nvkm_fanpwm *fan = (void *)therm->fan;
-       struct nvkm_gpio *gpio = nvkm_gpio(therm);
-       int card_type = nv_device(therm)->card_type;
+       struct nvkm_device *device = therm->base.subdev.device;
+       struct nvkm_gpio *gpio = device->gpio;
+       int card_type = device->card_type;
        u32 divs, duty;
        int ret;
 
@@ -52,7 +53,7 @@ nvkm_fanpwm_get(struct nvkm_therm *obj)
                return (duty * 100) / divs;
        }
 
-       return gpio->get(gpio, 0, fan->func.func, fan->func.line) * 100;
+       return nvkm_gpio_get(gpio, 0, fan->func.func, fan->func.line) * 100;
 }
 
 static int
index 88cc190f5a3e1e9423d6844d65c97b42e73d5364..7e1f21d81eb12acb166c430f486668c8aeea01f0 100644 (file)
@@ -39,8 +39,9 @@ static void
 nvkm_fantog_update(struct nvkm_fantog *fan, int percent)
 {
        struct nvkm_therm_priv *therm = (void *)fan->base.parent;
-       struct nvkm_timer *tmr = nvkm_timer(therm);
-       struct nvkm_gpio *gpio = nvkm_gpio(therm);
+       struct nvkm_device *device = therm->base.subdev.device;
+       struct nvkm_timer *tmr = device->timer;
+       struct nvkm_gpio *gpio = device->gpio;
        unsigned long flags;
        int duty;
 
@@ -49,8 +50,8 @@ nvkm_fantog_update(struct nvkm_fantog *fan, int percent)
                percent = fan->percent;
        fan->percent = percent;
 
-       duty = !gpio->get(gpio, 0, DCB_GPIO_FAN, 0xff);
-       gpio->set(gpio, 0, DCB_GPIO_FAN, 0xff, duty);
+       duty = !nvkm_gpio_get(gpio, 0, DCB_GPIO_FAN, 0xff);
+       nvkm_gpio_set(gpio, 0, DCB_GPIO_FAN, 0xff, duty);
 
        if (list_empty(&fan->alarm.head) && percent != (duty * 100)) {
                u64 next_change = (percent * fan->period_us) / 100;
index 33388378aa6d72b17f9cc38e30a1508299c3a2a6..d2bac1d7781905cfc9868adb5fd0435597d6d9a4 100644 (file)
@@ -34,13 +34,13 @@ static const u8 tags[] = {
 int
 nvkm_voltgpio_get(struct nvkm_volt *volt)
 {
-       struct nvkm_gpio *gpio = nvkm_gpio(volt);
+       struct nvkm_gpio *gpio = volt->subdev.device->gpio;
        u8 vid = 0;
        int i;
 
        for (i = 0; i < ARRAY_SIZE(tags); i++) {
                if (volt->vid_mask & (1 << i)) {
-                       int ret = gpio->get(gpio, 0, tags[i], 0xff);
+                       int ret = nvkm_gpio_get(gpio, 0, tags[i], 0xff);
                        if (ret < 0)
                                return ret;
                        vid |= ret << i;
@@ -53,12 +53,12 @@ nvkm_voltgpio_get(struct nvkm_volt *volt)
 int
 nvkm_voltgpio_set(struct nvkm_volt *volt, u8 vid)
 {
-       struct nvkm_gpio *gpio = nvkm_gpio(volt);
+       struct nvkm_gpio *gpio = volt->subdev.device->gpio;
        int i;
 
        for (i = 0; i < ARRAY_SIZE(tags); i++, vid >>= 1) {
                if (volt->vid_mask & (1 << i)) {
-                       int ret = gpio->set(gpio, 0, tags[i], 0xff, vid & 1);
+                       int ret = nvkm_gpio_set(gpio, 0, tags[i], 0xff, vid & 1);
                        if (ret < 0)
                                return ret;
                }
@@ -83,7 +83,7 @@ nvkm_voltgpio_init(struct nvkm_volt *volt)
         */
        for (i = 0; i < ARRAY_SIZE(tags); i++) {
                if (volt->vid_mask & (1 << i)) {
-                       int ret = gpio->find(gpio, 0, tags[i], 0xff, &func);
+                       int ret = nvkm_gpio_find(gpio, 0, tags[i], 0xff, &func);
                        if (ret) {
                                if (ret != -ENOENT)
                                        return ret;