*/
 struct ocores_i2c {
        void __iomem *base;
-       int iobase;
        u32 reg_shift;
        u32 reg_io_width;
        unsigned long flags;
        return ioread32be(i2c->base + (reg << i2c->reg_shift));
 }
 
-static void oc_setreg_io_8(struct ocores_i2c *i2c, int reg, u8 value)
-{
-       outb(value, i2c->iobase + reg);
-}
-
-static inline u8 oc_getreg_io_8(struct ocores_i2c *i2c, int reg)
-{
-       return inb(i2c->iobase + reg);
-}
-
 static inline void oc_setreg(struct ocores_i2c *i2c, int reg, u8 value)
 {
        i2c->setreg(i2c, reg, value);
                res = platform_get_resource(pdev, IORESOURCE_IO, 0);
                if (!res)
                        return -EINVAL;
-               i2c->iobase = res->start;
                if (!devm_request_region(&pdev->dev, res->start,
                                         resource_size(res),
                                         pdev->name)) {
                        dev_err(&pdev->dev, "Can't get I/O resource.\n");
                        return -EBUSY;
                }
-               i2c->setreg = oc_setreg_io_8;
-               i2c->getreg = oc_getreg_io_8;
+               i2c->base = devm_ioport_map(&pdev->dev, res->start,
+                                           resource_size(res));
+               if (!i2c->base) {
+                       dev_err(&pdev->dev, "Can't map I/O resource.\n");
+                       return -EBUSY;
+               }
+               i2c->reg_io_width = 1;
        }
 
        pdata = dev_get_platdata(&pdev->dev);