1 For both Cherrytrail (CHT) and Baytrail (BHT) the driver
2 requires the "candrpv_0415_20150521_0458" firmware version.
3 It should be noticed that the firmware file is different,
4 depending on the ISP model, so they're stored with different
7 - for BHT: /lib/firmware/shisp_2400b0_v21.bin
9 Warning: The driver was not tested yet for BHT.
11 - for CHT: /lib/firmware/shisp_2401a0_v21.bin
13 https://github.com/intel-aero/meta-intel-aero-base/blob/master/recipes-kernel/linux/linux-yocto/shisp_2401a0_v21.bin
18 This driver currently doesn't work with most V4L2 applications,
19 as there are still some issues with regards to implementing
20 certain APIs at the standard way.
22 Also, currently only USERPTR streaming mode is working.
24 In order to test, it is needed to know what's the sensor's
25 resolution. This can be checked with:
27 $ v4l2-ctl --get-fmt-video
29 Width/Height : 1600/1200
32 It is known to work with:
34 - v4l2grab at contrib/test directory at https://git.linuxtv.org/v4l-utils.git/
36 The resolution should not be bigger than the max resolution
37 supported by the sensor, or it will fail. So, if the sensor
40 The driver can be tested with:
42 v4l2grab -f YUYV -x 1600 -y 1200 -d /dev/video2 -u
44 - NVT at https://github.com/intel/nvt
47 --device /dev/video2 \
49 --exposure=30000,30000,30000,30000 \
50 --parm type=1,capturemode=CI_MODE_PREVIEW \
51 --fmt type=1,width=1600,height=1200,pixelformat=YUYV \
52 --reqbufs count=2,memory=USERPTR \
53 --parameters=wb_config.r=32768,wb_config.gr=21043,wb_config.gb=21043,wb_config.b=30863 \
56 As the output is in raw format, images need to be converted with:
58 $ for i in $(seq 0 19); do
59 name="testimage_$(printf "%03i" $i)"
60 ./raw2pnm -x$WIDTH -y$HEIGHT -f$FORMAT $name.raw $name.pnm
67 1. Fix support for MMAP streaming mode. This is required for most
70 2. Implement and/or fix V4L2 ioctls in order to allow a normal app to
73 3. Ensure that the driver will pass v4l2-compliance tests;
75 4. Get manufacturer's authorization to redistribute the binaries for
78 5. remove VIDEO_ATOMISP_ISP2401, making the driver to auto-detect the
79 register address differences between ISP2400 and ISP2401;
81 6. Cleanup the driver code, removing the abstraction layers inside it;
83 7. The atomisp doesn't rely at the usual i2c stuff to discover the
84 sensors. Instead, it calls a function from atomisp_gmin_platform.c.
85 There are some hacks added there for it to wait for sensors to be
86 probed (with a timeout of 2 seconds or so). This should be converted
87 to the usual way, using V4L2 async subdev framework to wait for
90 8. Switch to standard V4L2 sub-device API for sensor and lens. In
91 particular, the user space API needs to support V4L2 controls as
92 defined in the V4L2 spec and references to atomisp must be removed from
95 9. Use LED flash API for flash LED drivers such as LM3554 (which already
96 has a LED class driver).
98 10. Migrate the sensor drivers out of staging or re-using existing
101 11. Switch the driver to use pm_runtime stuff. Right now, it probes the
102 existing PMIC code and sensors call it directly.
104 12. There's a problem on sensor drivers: when trying to set a video
105 format, the atomisp main driver calls the sensor drivers with the
106 sensor turned off. This causes them to fail.
108 This was fixed at atomisp-ov2880, which has a hack inside it
109 to turn it on when VIDIOC_S_FMT is called, but this has to be
110 cheked on other drivers as well.
112 The right fix seems to power on the sensor when a video device is
113 opened (or at the first VIDIOC_ ioctl - except for VIDIOC_QUERYCAP),
114 powering it down at close() syscall.
116 Such kind of control would need to be done inside the atomisp driver,
117 not at the sensors code.
119 13. There are several issues related to memory management, that can
120 cause crashes and/or memory leaks. The atomisp splits the memory
121 management on three separate regions:
127 The code implementing it is at:
129 drivers/staging/media/atomisp/pci/hmm/
131 It also has a separate code for managing DMA buffers at:
133 drivers/staging/media/atomisp/pci/mmu/
135 The code there is really dirty, ugly and probably wrong. I fixed
136 one bug there already, but the best would be to just trash it and use
137 something else. Maybe the code from the newer intel driver could
140 drivers/staging/media/ipu3/ipu3-mmu.c
142 But converting it to use something like that is painful and may
143 cause some breakages.
145 14. The file structure needs to get tidied up to resemble a normal Linux
148 15. Lots of the midlayer glue. Unused code and abstraction needs removing.
150 16. The AtomISP driver includes some special IOCTLS (ATOMISP_IOC_XXXX_XXXX)
151 and controls that require some cleanup. Some of those code may have
152 been removed during the cleanups. They could be needed in order to
153 properly support 3A algorithms.
155 Such IOCTL interface needs more documentation. The better would
156 be to use something close to the interface used by the IPU3 IMGU driver.
158 17. The ISP code has some dependencies of the exact FW version.
159 The version defined in pci/sh_css_firmware.c:
161 BYT (isp2400): "irci_stable_candrpv_0415_20150521_0458"
163 CHT (isp2401): "irci_ecr - master_20150911_0724"
165 Those versions don't seem to be available anymore. On the tests we've
166 done so far, this version also seems to work for CHT:
168 "irci_stable_candrpv_0415_20150521_0458"
170 Which can be obtainable from Yocto Atom ISP respository.
172 but this was not thoroughly tested.
174 At some point we may need to round up a few driver versions and see if
175 there are any specific things that can be done to fold in support for
176 multiple firmware versions.
179 18. Switch from videobuf1 to videobuf2. Videobuf1 is being removed!
181 19. Correct Coding Style. Please refrain sending coding style patches
182 for this driver until the other work is done, as there will be a lot
183 of code churn until this driver becomes functional again.
185 20. Remove the logic which sets up pipelines inside it, moving it to
186 libcamera and implement MC support.
192 1. To test the patches, you also need the ISP firmware
194 for BYT: /lib/firmware/shisp_2400b0_v21.bin
195 for CHT: /lib/firmware/shisp_2401a0_v21.bin
197 The firmware files will usually be found in /etc/firmware on an Android
198 device but can also be extracted from the upgrade kit if you've managed
199 to lose them somehow.
201 2. Without a 3A library the capture behaviour is not very good. To take a good
202 picture, you need tune ISP parameters by IOCTL functions or use a 3A library
205 3. The driver is intended to drive the PCI exposed versions of the device.
206 It will not detect those devices enumerated via ACPI as a field of the
209 There are some patches adding i915 GPU support floating at the Yocto's
210 Aero repository (so far, untested upstream).
212 4. The driver supports only v2 of the IPU/Camera. It will not work with the
213 versions of the hardware in other SoCs.