chip->ident = V4L2_IDENT_NONE;
        chip->revision = 0;
-       if (chip->match.type == V4L2_CHIP_MATCH_HOST) {
-               if (v4l2_chip_match_host(&chip->match))
-                       chip->ident = V4L2_IDENT_NONE;
+       if (chip->match.type == V4L2_CHIP_MATCH_BRIDGE) {
+               if (chip->match.addr > 1)
+                       return -EINVAL;
                return 0;
        }
        if (chip->match.type != V4L2_CHIP_MATCH_I2C_DRIVER &&
        return 0;
 }
 
+static int vidioc_g_chip_name(struct file *file, void *priv,
+              struct v4l2_dbg_chip_name *chip)
+{
+       struct em28xx_fh      *fh  = priv;
+       struct em28xx         *dev = fh->dev;
+
+       if (chip->match.addr > 1)
+               return -EINVAL;
+       if (chip->match.addr == 1)
+               strlcpy(chip->name, "ac97", sizeof(chip->name));
+       else
+               strlcpy(chip->name, dev->v4l2_dev.name, sizeof(chip->name));
+       return 0;
+}
+
 #ifdef CONFIG_VIDEO_ADV_DEBUG
 static int em28xx_reg_len(int reg)
 {
        int ret;
 
        switch (reg->match.type) {
+       case V4L2_CHIP_MATCH_BRIDGE:
+               if (reg->match.addr > 1)
+                       return -EINVAL;
+               if (!reg->match.addr)
+                       break;
+               /* fall-through */
        case V4L2_CHIP_MATCH_AC97:
                ret = em28xx_read_ac97(dev, reg->reg);
                if (ret < 0)
                v4l2_device_call_all(&dev->v4l2_dev, 0, core, g_register, reg);
                return 0;
        default:
-               if (!v4l2_chip_match_host(®->match))
-                       return -EINVAL;
+               return -EINVAL;
        }
 
        /* Match host */
        __le16 buf;
 
        switch (reg->match.type) {
+       case V4L2_CHIP_MATCH_BRIDGE:
+               if (reg->match.addr > 1)
+                       return -EINVAL;
+               if (!reg->match.addr)
+                       break;
+               /* fall-through */
        case V4L2_CHIP_MATCH_AC97:
                return em28xx_write_ac97(dev, reg->reg, reg->val);
        case V4L2_CHIP_MATCH_I2C_DRIVER:
                v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_register, reg);
                return 0;
        default:
-               if (!v4l2_chip_match_host(®->match))
-                       return -EINVAL;
+               return -EINVAL;
        }
 
        /* Match host */
        .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
        .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
        .vidioc_g_chip_ident        = vidioc_g_chip_ident,
+       .vidioc_g_chip_name         = vidioc_g_chip_name,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
        .vidioc_g_register          = vidioc_g_register,
        .vidioc_s_register          = vidioc_s_register,
        .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
        .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
        .vidioc_g_chip_ident  = vidioc_g_chip_ident,
+       .vidioc_g_chip_name   = vidioc_g_chip_name,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
        .vidioc_g_register    = vidioc_g_register,
        .vidioc_s_register    = vidioc_s_register,