I think a character device driver implementing mmap should be adequate. Linux Device Drives covers that in chapter 15.
Well, i2c is a serial bus, so mmap is not an option. I will refer you to Essential Linux Device Drivers book. I believe it has a sample i2c EEPROM char device driver in Chapter 8. Hope this helps.