The problem with the definition of io_p2v is that it gives you
an type that is impossible to use correctly, except in assembly
code. Linux assumes that MMIO registers in virtual space
are __iomem pointers, and we like that to be consistent.

If you have a function that returns a virtual address, it should
really have the same type as any other function that uses a virtual
address.