TODO:

From the initial code review:

The main thing you need to do is to implement all the controls using the
control framework (see Documentation/video4linux/v4l2-controls.txt).
Most drivers are by now converted to the control framework, so you will
find many examples of how to do this in drivers/media/radio.

The sysfs stuff should be replaced by controls as well. A lot of the RDS
support is now available as controls (although there may well be some
missing features, but that is easy enough to add). Since the RDS data is
actually read() from the device I am not sure whether the RDS
properties/controls should be there at all.

Correct Coding Style, as this driver also violates several Style
rules, and do evil tricks, like returning from a function inside a
macro.

Finally this driver should probably be split up into two parts: one
v4l2_subdev-based core driver and one platform driver. See e.g.
radio-si4713/si4713-i2c.c as a good example. But I would wait with that
until the rest of the driver is cleaned up. Then I have a better idea of
whether this is necessary or not.