media: atmel: atmel-isc: add support for DO_WHITE_BALANCE
authorEugen Hristev <eugen.hristev@microchip.com>
Mon, 15 Apr 2019 14:13:54 +0000 (10:13 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Tue, 21 May 2019 11:17:09 +0000 (07:17 -0400)
commit90a493a349177cf03070866b7bb3becd0aed7bf3
tree7c5c48bdbe16b7efb94cd69328fa5b2dfec78e6e
parenta0816e5088baab82aa738d61a55513114a673c8e
media: atmel: atmel-isc: add support for DO_WHITE_BALANCE

This adds support for the 'button' control DO_WHITE_BALANCE
This feature will enable the ISC to compute the white balance coefficients
in a one time shot, at the user discretion.
This can be used if a color chart/grey chart is present in front of the camera.
The ISC will adjust the coefficients and have them fixed until next balance
or until sensor mode is changed.
This is particularly useful for white balance adjustment in different
lighting scenarios, and then taking photos to similar scenery.
The old auto white balance stays in place, where the ISC will adjust every
4 frames to the current scenery lighting, if the scenery is approximately
grey in average, otherwise grey world algorithm fails.
One time white balance adjustments needs streaming to be enabled, such that
capture is enabled and the histogram has data to work with.
Histogram without capture does not work in this hardware module.

To start the one time white balance procedure:
v4l2-ctl --set-ctrl=do_white_balance=1

This feature works only if the sensor is streaming RAW data, as the hardware
supports a histogram only for RAW bayer components.

If the auto white balance is enabled, do_white_balance does nothing.
If the streaming is disabled, or the sensor does not output RAW data, the
control is inactive.

User controls now include the do_white_balance ctrl:
User Controls

                     brightness 0x00980900 (int)    : min=-1024 max=1023 step=1 default=0 value=0 flags=slider
                       contrast 0x00980901 (int)    : min=-2048 max=2047 step=1 default=256 value=256 flags=slider
        white_balance_automatic 0x0098090c (bool)   : default=1 value=0
               do_white_balance 0x0098090d (button) : flags=write-only, execute-on-write
                          gamma 0x00980910 (int)    : min=0 max=2 step=1 default=2 value=2 flags=slider

Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/platform/atmel/atmel-isc.c