On 16/04/15 22:52, rajeev kumar wrote: >>>> +#define bsc_readl(_dev, reg) \ >>>> + __bsc_readl(_dev, offsetof(struct bsc_regs, reg)) >>>> + > > use readl/writel This peripheral is used on chips that can run in either little or big-endian, and in both cases, this is a board-level strap that dictates the entire endianess of the system, such that on-chip peripherals should always be accessed in the host (native) endianess. readl/writel introduce an implicit endian conversion for kernels compiled in big-endian, that we do not want here. Depending on the architecture, there is also an additional barrier that is not needed, since the underlying bus serving this peripheral (GISB) does not re-order transactions, and writes are not posted. A better abstraction however could be something like this: #ifdef CONFIG_CPU_BIG_ENDIAN #define __bsc_readl(_dev, reg) ioread32be(...) #else #define __bsc_readl(_dev, reg) ioread32(...) #endif Such that we preserve the host endianess access, but we clearly identify the differences in running in a big or little endian configuration? -- Florian -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html