media: v4l: cci: Add macros to obtain register width and address
[ Upstream commit cd93cc245dfe334c38da98c14b34f9597e1b4ea6 ] Add CCI_REG_WIDTH() macro to obtain register width in bits and similarly, CCI_REG_WIDTH_BYTES() to obtain it in bytes. Also add CCI_REG_ADDR() macro to obtain the address of a register. Use both macros in v4l2-cci.c, too. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Reviewed-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Stable-dep-of: d92e7a013ff3 ("media: v4l2-cci: Add support for little-endian encoded registers") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
36bf2a8fb0
commit
8d2cd1724e
|
@ -25,8 +25,8 @@ int cci_read(struct regmap *map, u32 reg, u64 *val, int *err)
|
|||
if (err && *err)
|
||||
return *err;
|
||||
|
||||
len = FIELD_GET(CCI_REG_WIDTH_MASK, reg);
|
||||
reg = FIELD_GET(CCI_REG_ADDR_MASK, reg);
|
||||
len = CCI_REG_WIDTH_BYTES(reg);
|
||||
reg = CCI_REG_ADDR(reg);
|
||||
|
||||
ret = regmap_bulk_read(map, reg, buf, len);
|
||||
if (ret) {
|
||||
|
@ -75,8 +75,8 @@ int cci_write(struct regmap *map, u32 reg, u64 val, int *err)
|
|||
if (err && *err)
|
||||
return *err;
|
||||
|
||||
len = FIELD_GET(CCI_REG_WIDTH_MASK, reg);
|
||||
reg = FIELD_GET(CCI_REG_ADDR_MASK, reg);
|
||||
len = CCI_REG_WIDTH_BYTES(reg);
|
||||
reg = CCI_REG_ADDR(reg);
|
||||
|
||||
switch (len) {
|
||||
case 1:
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#ifndef _V4L2_CCI_H
|
||||
#define _V4L2_CCI_H
|
||||
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/bits.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
|
@ -34,6 +35,10 @@ struct cci_reg_sequence {
|
|||
#define CCI_REG_WIDTH_SHIFT 16
|
||||
#define CCI_REG_WIDTH_MASK GENMASK(19, 16)
|
||||
|
||||
#define CCI_REG_WIDTH_BYTES(x) FIELD_GET(CCI_REG_WIDTH_MASK, x)
|
||||
#define CCI_REG_WIDTH(x) (CCI_REG_WIDTH_BYTES(x) << 3)
|
||||
#define CCI_REG_ADDR(x) FIELD_GET(CCI_REG_ADDR_MASK, x)
|
||||
|
||||
#define CCI_REG8(x) ((1 << CCI_REG_WIDTH_SHIFT) | (x))
|
||||
#define CCI_REG16(x) ((2 << CCI_REG_WIDTH_SHIFT) | (x))
|
||||
#define CCI_REG24(x) ((3 << CCI_REG_WIDTH_SHIFT) | (x))
|
||||
|
|
Loading…
Reference in New Issue