aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.c
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2015-08-20 14:54:15 +1000
committerBen Skeggs <bskeggs@redhat.com>2015-08-28 12:40:29 +1000
commit2aa5eac5163fedf09f2d61992cb5ea4d75bec9db (patch)
tree64bd7231349c928341892f4141d85e3397400d0a /drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.c
parentdrm/nouveau/fb: transition nvkm_ram away from being based on nvkm_object (diff)
downloadlinux-dev-2aa5eac5163fedf09f2d61992cb5ea4d75bec9db.tar.xz
linux-dev-2aa5eac5163fedf09f2d61992cb5ea4d75bec9db.zip
drm/nouveau/i2c: transition pad/ports away from being based on nvkm_object
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.c')
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.c87
1 files changed, 2 insertions, 85 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.c
index 24edcdbca3de..40533d786894 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.c
@@ -22,89 +22,7 @@
* Authors: Ben Skeggs
*/
#include "priv.h"
-
-#include <subdev/vga.h>
-
-struct nv4e_i2c_port {
- struct nvkm_i2c_port base;
- u32 addr;
-};
-
-static void
-nv4e_i2c_drive_scl(struct nvkm_i2c_port *base, int state)
-{
- struct nvkm_i2c *i2c = (void *)nvkm_i2c(base);
- struct nvkm_device *device = i2c->subdev.device;
- struct nv4e_i2c_port *port = (void *)base;
- nvkm_mask(device, port->addr, 0x2f, state ? 0x21 : 0x01);
-}
-
-static void
-nv4e_i2c_drive_sda(struct nvkm_i2c_port *base, int state)
-{
- struct nvkm_i2c *i2c = (void *)nvkm_i2c(base);
- struct nvkm_device *device = i2c->subdev.device;
- struct nv4e_i2c_port *port = (void *)base;
- nvkm_mask(device, port->addr, 0x1f, state ? 0x11 : 0x01);
-}
-
-static int
-nv4e_i2c_sense_scl(struct nvkm_i2c_port *base)
-{
- struct nvkm_i2c *i2c = (void *)nvkm_i2c(base);
- struct nvkm_device *device = i2c->subdev.device;
- struct nv4e_i2c_port *port = (void *)base;
- return !!(nvkm_rd32(device, port->addr) & 0x00040000);
-}
-
-static int
-nv4e_i2c_sense_sda(struct nvkm_i2c_port *base)
-{
- struct nvkm_i2c *i2c = (void *)nvkm_i2c(base);
- struct nvkm_device *device = i2c->subdev.device;
- struct nv4e_i2c_port *port = (void *)base;
- return !!(nvkm_rd32(device, port->addr) & 0x00080000);
-}
-
-static const struct nvkm_i2c_func
-nv4e_i2c_func = {
- .drive_scl = nv4e_i2c_drive_scl,
- .drive_sda = nv4e_i2c_drive_sda,
- .sense_scl = nv4e_i2c_sense_scl,
- .sense_sda = nv4e_i2c_sense_sda,
-};
-
-static int
-nv4e_i2c_port_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
- struct nvkm_oclass *oclass, void *data, u32 index,
- struct nvkm_object **pobject)
-{
- struct dcb_i2c_entry *info = data;
- struct nv4e_i2c_port *port;
- int ret;
-
- ret = nvkm_i2c_port_create(parent, engine, oclass, index,
- &nvkm_i2c_bit_algo, &nv4e_i2c_func, &port);
- *pobject = nv_object(port);
- if (ret)
- return ret;
-
- port->addr = 0x600800 + info->drive;
- return 0;
-}
-
-static struct nvkm_oclass
-nv4e_i2c_sclass[] = {
- { .handle = NV_I2C_TYPE_DCBI2C(DCB_I2C_NV4E_BIT),
- .ofuncs = &(struct nvkm_ofuncs) {
- .ctor = nv4e_i2c_port_ctor,
- .dtor = _nvkm_i2c_port_dtor,
- .init = _nvkm_i2c_port_init,
- .fini = _nvkm_i2c_port_fini,
- },
- },
- {}
-};
+#include "pad.h"
struct nvkm_oclass *
nv4e_i2c_oclass = &(struct nvkm_i2c_impl) {
@@ -115,6 +33,5 @@ nv4e_i2c_oclass = &(struct nvkm_i2c_impl) {
.init = _nvkm_i2c_init,
.fini = _nvkm_i2c_fini,
},
- .sclass = nv4e_i2c_sclass,
- .pad_x = &nv04_i2c_pad_oclass,
+ .pad_x_new = nv4e_i2c_pad_new,
}.base;