1. A single AtomISP driver needs to be implemented to support both BYT and
   CHT platforms. The current driver is a mechanical and hand combined merge
   of the two using an ifdef ISP2401 to select the CHT version, which at the
   moment is not enabled. Eventually this should become a runtime if check,
   but there are some quite tricky things that need sorting out before that
   will be possible.

2. The file structure needs to get tidied up to resemble a normal Linux
   driver.

3. Lots of the midlayer glue. unused code and abstraction needs removing.

3. The sensor drivers read MIPI settings from EFI variables or default to the
   settings hard-coded in the platform data file for different platforms.
   This isn't ideal but may be hard to improve as this is how existing
   platforms work.

4. The sensor drivers use the regulator framework API. In the ideal world it
   would be using ACPI but that's not how the existing devices work.

5. The AtomISP driver includes some special IOCTLS (ATOMISP_IOC_XXXX_XXXX)
   that may need some cleaning up.

6. Correct Coding Style. Please don't send coding style patches for this
   driver until the other work is done.

7. The ISP code depends on the exact FW version. The version defined in
   BYT: 
   drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_firmware.c
   static const char *release_version = STR(irci_stable_candrpv_0415_20150521_0458);
   CHT:
   drivers/staging/media/atomisp/pci/atomisp2/css/sh_css_firmware.c
   static const char *release_version = STR(irci_ecr-master_20150911_0724);

   At some point we may need to round up a few driver versions and see if
   there are any specific things that can be done to fold in support for
   multiple firmware versions.


Limitations:

1. Currently the patch only support some camera sensors
   gc2235/gc0310/0v2680/ov2722/ov5693/mt9m114...

2. To test the patches, you also need the ISP firmware

   for BYT:/lib/firmware/shisp_2400b0_v21.bin
   for CHT:/lib/firmware/shisp_2401a0_v21.bin

   The firmware files will usually be found in /etc/firmware on an Android
   device but can also be extracted from the upgrade kit if you've managed
   to lose them somehow.

3. Without a 3A libary the capture behaviour is not very good. To take a good
   picture, you need tune ISP parameters by IOCTL functions or use a 3A libary
   such as libxcam.

4. The driver is intended to drive the PCI exposed versions of the device.
   It will not detect those devices enumerated via ACPI as a field of the
   i915 GPU driver.

5. The driver supports only v2 of the IPU/Camera. It will not work with the
   versions of the hardware in other SoCs.

