aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/drivers/staging/media/atomisp/TODO
blob: 52683a70422323acb18d4cb5f926a847638b5b56 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
1. A single AtomISP driver needs to be implemented to support both
   Baytrail (BYT and Cherrytail (CHT) platforms at the same time.
   The current driver is a mechanical and hand combined merge of the
   two using several runtime macros, plus some ifdef ISP2401 to select the
   CHT version. Yet, there are some ISP-specific headers that change the
   driver's behavior during compile time.

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.
   It should be possible to improve it, by adding support for _DSM tables.

4. The sensor drivers use PMIC and 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)
   and controls that require some cleanup.

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

7. The ISP code has some dependencies of the exact FW version.
   The version defined in pci/sh_css_firmware.c:
   BYT:
	static const char *isp2400_release_version = STR(irci_stable_candrpv_0415_20150521_0458);

   CHT:
	static const char *isp2401_release_version = STR(irci_ecr - master_20150911_0724);

   Those versions don't seem to be available anymore. On the tests we've
   done so far, this version also seems to work for isp2401:

		irci_stable_candrpv_0415_20150521_0458

   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.

8. Switch to V4L2 async API to set up sensor, lens and flash devices.
   Control those devices using V4L2 sub-device API without custom
   extensions.

9. Switch to standard V4L2 sub-device API for sensor and lens. In
   particular, the user space API needs to support V4L2 controls as
   defined in the V4L2 spec and references to atomisp must be removed from
   these drivers.

10. Use LED flash API for flash LED drivers such as LM3554 (which already
    has a LED class driver).

11. Switch from videobuf1 to videobuf2. Videobuf1 is being removed!

12. There are some memory management code that seems to be
    forked from Kernel 3.10 inside hmm/ directory. Get rid of it,
    making the driver to use a more standard memory management module.

13. While the driver probes the hardware and reports itself as a
    V4L2 driver, there are still some issues preventing it to
    stream (at least it doesn't with the standard V4L2 applications.
    Didn't test yet with some custom-made app for this driver).
    Solving the related bugs and issues preventing it to work is
    needed.

Limitations:

1. 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.

2. 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.

3. 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.

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