Hello everyone,
Here's a set of patches that turn the existing SMIA driver into a MIPI CCS
driver while maintaining SMIA support. A number of bugs in the existing
code are fixed in this set, too.
The changes at this point are primarily focused on dealing with new
mandatory driver features related to PLL configuration (as CCS allows for
much more variation there) and things such as integer conversion from
U16.U16 format instead of float. There are some other new features as well
such as digital gain and support for getting device specific analogue gain
coefficients.
A new feature in CCS is CCS static data which makes it possible to obtain
sensor's capabilities and limits from a file chosen based on sensor
identification. CCS static data is used also for storing MSR registers so
supporting new, CCS compliant devices requires no driver changes.
Note that the library as well as the register definitions are dual
licensed under GNU GPL v2 OR BSD 3-clause licenses for use outside the
Linux kernel.
Also DT bindings are updated accordingly and converted to YAML format.
More information on MIPI CCS can be found here:
<URL:https://www.mipi.org/specifications/camera-command-set>
Comments are welcome.
Sakari Ailus (100):
smiapp: Add CCS register definitions and limits
smiapp: Use CCS register flags
smiapp: Calculate CCS limit offsets and limit buffer size
smiapp: Remove macros for defining registers, merge definitions
smiapp: Add macros for accessing CCS registers
smiapp: Use MIPI CCS version and manufacturer ID information
smiapp: Read CCS limit values
smiapp: Switch to CCS limits
smiapp: Obtain frame descriptor from CCS limits
smiapp: Use CCS limits in reading data format descriptors
smiapp: Use CCS limits in reading binning capabilities
smiapp: Use CCS registers
smiapp: Remove quirk function for writing a single 8-bit register
smiapp: Rename register access functions
smiapp: Internal rename to CCS
smiapp: Differentiate CCS sensors from SMIA in subdev naming
smiapp: Rename as "ccs"
ccs: Remove profile concept
ccs: Give all subdevs a function
dt-bindings: Add vendor prefix for MIPI Alliance
dt-bindings: nokia,smia: Fix link-frequencies documentation
dt-bindings: nokia,smia: Make vana-supply optional
dt-bindings: nokia,smia: Convert to YAML
dt-bindings: nokia,smia: Use better active polarity for reset
dt-bindings: Amend SMIA bindings with MIPI CCS support
dt-bindings: Add bus-type for C-PHY support
ccs: Request for "reset" GPIO
ccs: Add "mipi,ccs" compatible string
ccs: Remove the I²C ID table
ccs: Remove remaining support for platform data
ccs: Make hwcfg part of the device specific struct
ccs: Add CCS static data parser library
ccs: Combine revision number major and minor into one
ccs: Read CCS static data from firmware binaries
ccs: Stop reading arrays after the first zero
ccs: The functions to get compose or crop rectangle never return NULL
ccs: Replace somewhat harsh internal checks based on BUG with WARN_ON
ccs: Refactor register reading a little
ccs: Make real to integer number conversion optional
ccs: Move limit value real to integer conversion from read to access
time
ccs: Read ireal numbers correctly
smiapp-pll: Rename as ccs-pll
ccs: Change my e-mail address
ccs: Add support for manufacturer regs from sensor and module files
ccs: Use static data read-only registers
ccs: Clean up runtime PM usage
ccs: Wrap long lines, unwrap short ones
ccs: Add device compatible identifiers for telling SMIA and CCS apart
ccs: Use longer pre-I²C sleep for CCS compliant devices
ccs-pll: Don't use div_u64 to divide a 32-bit number
ccs-pll: Split limits and PLL configuration into front and back parts
ccs-pll: Use correct VT divisor for calculating VT SYS divisor
ccs-pll: End search if there are no better values available
ccs-pll: Remove parallel bus support
ccs-pll: Differentiate between CSI-2 D-PHY and C-PHY
ccs-pll: Move the flags field down, away from 8-bit fields
ccs-pll: Document the structs in the header as well as the function
ccs-pll: Use the BIT macro
ccs-pll: Begin calculation from OP system clock frequency
ccs-pll: Fix condition for pre-PLL divider lower bound
ccs-pll: Avoid overflow in pre-PLL divisor lower bound search
ccs-pll: Fix comment on check against maximum PLL multiplier
ccs-pll: Fix check for PLL multiplier upper bound
ccs-pll: Use explicit 32-bit unsigned type
ccs-pll: Add support for lane speed model
ccs: Add support for lane speed model
ccs-pll: Add support for decoupled OP domain calculation
ccs-pll: Add support for extended input PLL clock divider
ccs-pll: Support two cycles per pixel on OP domain
ccs-pll: Add support flexible OP PLL pixel clock divider
ccs-pll: Add sanity checks
ccs-pll: Add C-PHY support
ccs-pll: Split off VT subtree calculation
ccs-pll: Check for derating and overrating, support non-derating
sensors
ccs-pll: Better separate OP and VT sub-tree calculation
ccs-pll: Print relevant information on PLL tree
ccs-pll: Rework bounds checks
ccs-pll: Make VT divisors 16-bit
ccs-pll: Fix VT post-PLL divisor calculation
ccs-pll: Separate VT divisor limit calculation from the rest
ccs-pll: Add trivial dual PLL support
ccs: Dual PLL support
ccs-pll: Add support for DDR OP system and pixel clocks
ccs: Add support for DDR OP SYS and OP PIX clocks
ccs: Print written register values
ccs-pll: Print pixel rates
ccs: Add support for obtaining C-PHY configuration from firmware
ccs: Add digital gain support
ccs: Add support for old-style SMIA digital gain
ccs: Remove analogue gain field
ccs: Only add analogue gain control if the device supports it
v4l: Add user control base for CCS controls
v4l: uapi: Add controls for analogue gain constants
ccs: Add support for analogue gain coefficient controls
v4l: uapi: Add controls for CCS alternative analogue gain
ccs: Add support for alternate analogue global gain
ccs: Add debug prints for MSR registers
v4l: uapi: Add CCS controls for correction configuration and
capabilities
ccs: Add shading correction and luminance correction level controls
smiapp: Add CCS ACPI device ID
.../bindings/media/i2c/mipi,ccs.yaml | 164 +
.../bindings/media/i2c/nokia,smia.txt | 66 -
.../devicetree/bindings/vendor-prefixes.yaml | 2 +
MAINTAINERS | 20 +-
drivers/media/i2c/Kconfig | 4 +-
drivers/media/i2c/Makefile | 4 +-
drivers/media/i2c/ccs-pll.c | 885 ++++
drivers/media/i2c/ccs-pll.h | 211 +
drivers/media/i2c/ccs/Kconfig | 11 +
drivers/media/i2c/ccs/Makefile | 6 +
drivers/media/i2c/ccs/ccs-core.c | 3665 +++++++++++++++++
drivers/media/i2c/ccs/ccs-data-defs.h | 215 +
drivers/media/i2c/ccs/ccs-data.c | 949 +++++
drivers/media/i2c/ccs/ccs-data.h | 116 +
drivers/media/i2c/ccs/ccs-limits.c | 239 ++
drivers/media/i2c/ccs/ccs-limits.h | 258 ++
drivers/media/i2c/ccs/ccs-os.h | 15 +
.../smiapp-quirk.c => ccs/ccs-quirk.c} | 105 +-
.../smiapp-quirk.h => ccs/ccs-quirk.h} | 54 +-
drivers/media/i2c/ccs/ccs-reg-access.c | 417 ++
drivers/media/i2c/ccs/ccs-reg-access.h | 42 +
drivers/media/i2c/ccs/ccs-regs.h | 953 +++++
.../media/i2c/{smiapp/smiapp.h => ccs/ccs.h} | 183 +-
drivers/media/i2c/ccs/smiapp-reg-defs.h | 582 +++
drivers/media/i2c/smiapp-pll.c | 482 ---
drivers/media/i2c/smiapp-pll.h | 99 -
drivers/media/i2c/smiapp/Kconfig | 10 -
drivers/media/i2c/smiapp/Makefile | 6 -
drivers/media/i2c/smiapp/smiapp-core.c | 3173 --------------
drivers/media/i2c/smiapp/smiapp-limits.c | 118 -
drivers/media/i2c/smiapp/smiapp-limits.h | 114 -
drivers/media/i2c/smiapp/smiapp-reg-defs.h | 489 ---
drivers/media/i2c/smiapp/smiapp-reg.h | 116 -
drivers/media/i2c/smiapp/smiapp-regs.c | 261 --
drivers/media/i2c/smiapp/smiapp-regs.h | 36 -
include/uapi/linux/ccs.h | 21 +
include/uapi/linux/v4l2-controls.h | 6 +
37 files changed, 8939 insertions(+), 5158 deletions(-)
create mode 100644 Documentation/devicetree/bindings/media/i2c/mipi,ccs.yaml
delete mode 100644 Documentation/devicetree/bindings/media/i2c/nokia,smia.txt
create mode 100644 drivers/media/i2c/ccs-pll.c
create mode 100644 drivers/media/i2c/ccs-pll.h
create mode 100644 drivers/media/i2c/ccs/Kconfig
create mode 100644 drivers/media/i2c/ccs/Makefile
create mode 100644 drivers/media/i2c/ccs/ccs-core.c
create mode 100644 drivers/media/i2c/ccs/ccs-data-defs.h
create mode 100644 drivers/media/i2c/ccs/ccs-data.c
create mode 100644 drivers/media/i2c/ccs/ccs-data.h
create mode 100644 drivers/media/i2c/ccs/ccs-limits.c
create mode 100644 drivers/media/i2c/ccs/ccs-limits.h
create mode 100644 drivers/media/i2c/ccs/ccs-os.h
rename drivers/media/i2c/{smiapp/smiapp-quirk.c => ccs/ccs-quirk.c} (63%)
rename drivers/media/i2c/{smiapp/smiapp-quirk.h => ccs/ccs-quirk.h} (53%)
create mode 100644 drivers/media/i2c/ccs/ccs-reg-access.c
create mode 100644 drivers/media/i2c/ccs/ccs-reg-access.h
create mode 100644 drivers/media/i2c/ccs/ccs-regs.h
rename drivers/media/i2c/{smiapp/smiapp.h => ccs/ccs.h} (53%)
create mode 100644 drivers/media/i2c/ccs/smiapp-reg-defs.h
delete mode 100644 drivers/media/i2c/smiapp-pll.c
delete mode 100644 drivers/media/i2c/smiapp-pll.h
delete mode 100644 drivers/media/i2c/smiapp/Kconfig
delete mode 100644 drivers/media/i2c/smiapp/Makefile
delete mode 100644 drivers/media/i2c/smiapp/smiapp-core.c
delete mode 100644 drivers/media/i2c/smiapp/smiapp-limits.c
delete mode 100644 drivers/media/i2c/smiapp/smiapp-limits.h
delete mode 100644 drivers/media/i2c/smiapp/smiapp-reg-defs.h
delete mode 100644 drivers/media/i2c/smiapp/smiapp-reg.h
delete mode 100644 drivers/media/i2c/smiapp/smiapp-regs.c
delete mode 100644 drivers/media/i2c/smiapp/smiapp-regs.h
create mode 100644 include/uapi/linux/ccs.h