Commit 97cf2028 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab

media: ti-vpe: cal: Name all cal_dev pointers consistently

Name all variables pointing to a cal_dev instance 'cal', instead of a
combination of 'caldev' and 'dev'. 'caldev' is only used in a few places
and could have been renamed to 'dev', but 'dev' is confusing as it's
also used for struct device instances. This generates lots of changes,
but increases readability.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: default avatarBenoit Parrot <bparrot@ti.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent d1739eab
...@@ -53,12 +53,12 @@ static unsigned debug; ...@@ -53,12 +53,12 @@ static unsigned debug;
module_param(debug, uint, 0644); module_param(debug, uint, 0644);
MODULE_PARM_DESC(debug, "activates debug info"); MODULE_PARM_DESC(debug, "activates debug info");
#define cal_dbg(level, caldev, fmt, arg...) \ #define cal_dbg(level, cal, fmt, arg...) \
v4l2_dbg(level, debug, &caldev->v4l2_dev, fmt, ##arg) v4l2_dbg(level, debug, &cal->v4l2_dev, fmt, ##arg)
#define cal_info(caldev, fmt, arg...) \ #define cal_info(cal, fmt, arg...) \
v4l2_info(&caldev->v4l2_dev, fmt, ##arg) v4l2_info(&cal->v4l2_dev, fmt, ##arg)
#define cal_err(caldev, fmt, arg...) \ #define cal_err(cal, fmt, arg...) \
v4l2_err(&caldev->v4l2_dev, fmt, ##arg) v4l2_err(&cal->v4l2_dev, fmt, ##arg)
#define ctx_dbg(level, ctx, fmt, arg...) \ #define ctx_dbg(level, ctx, fmt, arg...) \
v4l2_dbg(level, debug, &ctx->v4l2_dev, fmt, ##arg) v4l2_dbg(level, debug, &ctx->v4l2_dev, fmt, ##arg)
...@@ -309,9 +309,14 @@ static const struct cal_data am654_cal_data = { ...@@ -309,9 +309,14 @@ static const struct cal_data am654_cal_data = {
* DMA contexts. * DMA contexts.
* *
* The cal_dev structure represents the whole subsystem, including the CAL and * The cal_dev structure represents the whole subsystem, including the CAL and
* the CAMERARX instances. The cal_camerarx structure represents one CAMERARX * the CAMERARX instances. Instances of struct cal_dev are named cal through the
* instance. The cal_ctx structure represents the combination of one CSI-2 * driver.
* context, one processing context and one DMA context. *
* The cal_camerarx structure represents one CAMERARX instance.
*
* The cal_ctx structure represents the combination of one CSI-2 context, one
* processing context and one DMA context. Instance of struct cal_ctx are named
* ctx through the driver.
*/ */
struct cal_camerarx { struct cal_camerarx {
...@@ -355,7 +360,7 @@ struct cal_ctx { ...@@ -355,7 +360,7 @@ struct cal_ctx {
struct v4l2_subdev *sensor; struct v4l2_subdev *sensor;
struct v4l2_fwnode_endpoint endpoint; struct v4l2_fwnode_endpoint endpoint;
struct cal_dev *dev; struct cal_dev *cal;
struct cal_camerarx *cc; struct cal_camerarx *cc;
/* v4l2_ioctl mutex */ /* v4l2_ioctl mutex */
...@@ -391,19 +396,19 @@ struct cal_ctx { ...@@ -391,19 +396,19 @@ struct cal_ctx {
bool dma_act; bool dma_act;
}; };
static inline u32 reg_read_field(struct cal_dev *dev, u32 offset, u32 mask) static inline u32 reg_read_field(struct cal_dev *cal, u32 offset, u32 mask)
{ {
return FIELD_GET(mask, reg_read(dev, offset)); return FIELD_GET(mask, reg_read(cal, offset));
} }
static inline void reg_write_field(struct cal_dev *dev, u32 offset, u32 value, static inline void reg_write_field(struct cal_dev *cal, u32 offset, u32 value,
u32 mask) u32 mask)
{ {
u32 val = reg_read(dev, offset); u32 val = reg_read(cal, offset);
val &= ~mask; val &= ~mask;
val |= FIELD_PREP(mask, value); val |= FIELD_PREP(mask, value);
reg_write(dev, offset, val); reg_write(cal, offset, val);
} }
static const struct cal_fmt *find_format_by_pix(struct cal_ctx *ctx, static const struct cal_fmt *find_format_by_pix(struct cal_ctx *ctx,
...@@ -452,32 +457,31 @@ static inline void set_field(u32 *valp, u32 field, u32 mask) ...@@ -452,32 +457,31 @@ static inline void set_field(u32 *valp, u32 field, u32 mask)
static u32 cal_data_get_phy_max_lanes(struct cal_ctx *ctx) static u32 cal_data_get_phy_max_lanes(struct cal_ctx *ctx)
{ {
struct cal_dev *dev = ctx->dev;
u32 phy_id = ctx->csi2_port; u32 phy_id = ctx->csi2_port;
return dev->data->camerarx[phy_id].num_lanes; return ctx->cal->data->camerarx[phy_id].num_lanes;
} }
static u32 cal_data_get_num_csi2_phy(struct cal_dev *dev) static u32 cal_data_get_num_csi2_phy(struct cal_dev *cal)
{ {
return dev->data->num_csi2_phy; return cal->data->num_csi2_phy;
} }
static int cal_camerarx_regmap_init(struct cal_dev *dev, static int cal_camerarx_regmap_init(struct cal_dev *cal,
struct cal_camerarx *cc, struct cal_camerarx *cc,
unsigned int idx) unsigned int idx)
{ {
const struct cal_camerarx_data *phy_data; const struct cal_camerarx_data *phy_data;
unsigned int i; unsigned int i;
if (!dev->data) if (!cal->data)
return -EINVAL; return -EINVAL;
phy_data = &dev->data->camerarx[idx]; phy_data = &cal->data->camerarx[idx];
for (i = 0; i < F_MAX_FIELDS; i++) { for (i = 0; i < F_MAX_FIELDS; i++) {
struct reg_field field = { struct reg_field field = {
.reg = dev->syscon_camerrx_offset, .reg = cal->syscon_camerrx_offset,
.lsb = phy_data->fields[i].lsb, .lsb = phy_data->fields[i].lsb,
.msb = phy_data->fields[i].msb, .msb = phy_data->fields[i].msb,
}; };
...@@ -486,11 +490,11 @@ static int cal_camerarx_regmap_init(struct cal_dev *dev, ...@@ -486,11 +490,11 @@ static int cal_camerarx_regmap_init(struct cal_dev *dev,
* Here we update the reg offset with the * Here we update the reg offset with the
* value found in DT * value found in DT
*/ */
cc->phy.fields[i] = devm_regmap_field_alloc(&dev->pdev->dev, cc->phy.fields[i] = devm_regmap_field_alloc(&cal->pdev->dev,
dev->syscon_camerrx, cal->syscon_camerrx,
field); field);
if (IS_ERR(cc->phy.fields[i])) { if (IS_ERR(cc->phy.fields[i])) {
cal_err(dev, "Unable to allocate regmap fields\n"); cal_err(cal, "Unable to allocate regmap fields\n");
return PTR_ERR(cc->phy.fields[i]); return PTR_ERR(cc->phy.fields[i]);
} }
} }
...@@ -498,9 +502,9 @@ static int cal_camerarx_regmap_init(struct cal_dev *dev, ...@@ -498,9 +502,9 @@ static int cal_camerarx_regmap_init(struct cal_dev *dev,
return 0; return 0;
} }
static struct regmap *cal_get_camerarx_regmap(struct cal_dev *dev) static struct regmap *cal_get_camerarx_regmap(struct cal_dev *cal)
{ {
struct platform_device *pdev = dev->pdev; struct platform_device *pdev = cal->pdev;
struct regmap_config config = { }; struct regmap_config config = { };
struct regmap *regmap; struct regmap *regmap;
void __iomem *base; void __iomem *base;
...@@ -510,11 +514,11 @@ static struct regmap *cal_get_camerarx_regmap(struct cal_dev *dev) ...@@ -510,11 +514,11 @@ static struct regmap *cal_get_camerarx_regmap(struct cal_dev *dev)
"camerrx_control"); "camerrx_control");
base = devm_ioremap_resource(&pdev->dev, res); base = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(base)) { if (IS_ERR(base)) {
cal_err(dev, "failed to ioremap\n"); cal_err(cal, "failed to ioremap\n");
return ERR_CAST(base); return ERR_CAST(base);
} }
cal_dbg(1, dev, "ioresource %s at %pa - %pa\n", cal_dbg(1, cal, "ioresource %s at %pa - %pa\n",
res->name, &res->start, &res->end); res->name, &res->start, &res->end);
config.reg_bits = 32; config.reg_bits = 32;
...@@ -535,7 +539,7 @@ static struct regmap *cal_get_camerarx_regmap(struct cal_dev *dev) ...@@ -535,7 +539,7 @@ static struct regmap *cal_get_camerarx_regmap(struct cal_dev *dev)
static void camerarx_phy_enable(struct cal_ctx *ctx) static void camerarx_phy_enable(struct cal_ctx *ctx)
{ {
u32 phy_id = ctx->csi2_port; u32 phy_id = ctx->csi2_port;
struct cal_camerarx *cc = ctx->dev->cc[phy_id]; struct cal_camerarx *cc = ctx->cal->cc[phy_id];
u32 max_lanes; u32 max_lanes;
regmap_field_write(cc->phy.fields[F_CAMMODE], 0); regmap_field_write(cc->phy.fields[F_CAMMODE], 0);
...@@ -551,7 +555,7 @@ static void camerarx_phy_enable(struct cal_ctx *ctx) ...@@ -551,7 +555,7 @@ static void camerarx_phy_enable(struct cal_ctx *ctx)
static void camerarx_phy_disable(struct cal_ctx *ctx) static void camerarx_phy_disable(struct cal_ctx *ctx)
{ {
u32 phy_id = ctx->csi2_port; u32 phy_id = ctx->csi2_port;
struct cal_camerarx *cc = ctx->dev->cc[phy_id]; struct cal_camerarx *cc = ctx->cal->cc[phy_id];
regmap_field_write(cc->phy.fields[F_CTRLCLKEN], 0); regmap_field_write(cc->phy.fields[F_CTRLCLKEN], 0);
} }
...@@ -559,9 +563,9 @@ static void camerarx_phy_disable(struct cal_ctx *ctx) ...@@ -559,9 +563,9 @@ static void camerarx_phy_disable(struct cal_ctx *ctx)
/* /*
* Camera Instance access block * Camera Instance access block
*/ */
static struct cal_camerarx *cc_create(struct cal_dev *dev, unsigned int core) static struct cal_camerarx *cc_create(struct cal_dev *cal, unsigned int core)
{ {
struct platform_device *pdev = dev->pdev; struct platform_device *pdev = cal->pdev;
struct cal_camerarx *cc; struct cal_camerarx *cc;
int ret; int ret;
...@@ -576,14 +580,14 @@ static struct cal_camerarx *cc_create(struct cal_dev *dev, unsigned int core) ...@@ -576,14 +580,14 @@ static struct cal_camerarx *cc_create(struct cal_dev *dev, unsigned int core)
"cal_rx_core1"); "cal_rx_core1");
cc->base = devm_ioremap_resource(&pdev->dev, cc->res); cc->base = devm_ioremap_resource(&pdev->dev, cc->res);
if (IS_ERR(cc->base)) { if (IS_ERR(cc->base)) {
cal_err(dev, "failed to ioremap\n"); cal_err(cal, "failed to ioremap\n");
return ERR_CAST(cc->base); return ERR_CAST(cc->base);
} }
cal_dbg(1, dev, "ioresource %s at %pa - %pa\n", cal_dbg(1, cal, "ioresource %s at %pa - %pa\n",
cc->res->name, &cc->res->start, &cc->res->end); cc->res->name, &cc->res->start, &cc->res->end);
ret = cal_camerarx_regmap_init(dev, cc, core); ret = cal_camerarx_regmap_init(cal, cc, core);
if (ret) if (ret)
return ERR_PTR(ret); return ERR_PTR(ret);
...@@ -593,17 +597,17 @@ static struct cal_camerarx *cc_create(struct cal_dev *dev, unsigned int core) ...@@ -593,17 +597,17 @@ static struct cal_camerarx *cc_create(struct cal_dev *dev, unsigned int core)
/* /*
* Get Revision and HW info * Get Revision and HW info
*/ */
static void cal_get_hwinfo(struct cal_dev *dev) static void cal_get_hwinfo(struct cal_dev *cal)
{ {
u32 revision; u32 revision;
u32 hwinfo; u32 hwinfo;
revision = reg_read(dev, CAL_HL_REVISION); revision = reg_read(cal, CAL_HL_REVISION);
cal_dbg(3, dev, "CAL_HL_REVISION = 0x%08x (expecting 0x40000200)\n", cal_dbg(3, cal, "CAL_HL_REVISION = 0x%08x (expecting 0x40000200)\n",
revision); revision);
hwinfo = reg_read(dev, CAL_HL_HWINFO); hwinfo = reg_read(cal, CAL_HL_HWINFO);
cal_dbg(3, dev, "CAL_HL_HWINFO = 0x%08x (expecting 0xA3C90469)\n", cal_dbg(3, cal, "CAL_HL_HWINFO = 0x%08x (expecting 0xA3C90469)\n",
hwinfo); hwinfo);
} }
...@@ -626,38 +630,38 @@ static void cal_get_hwinfo(struct cal_dev *dev) ...@@ -626,38 +630,38 @@ static void cal_get_hwinfo(struct cal_dev *dev)
* Core 0: 0x4845 B828 = 0x0000 0040 * Core 0: 0x4845 B828 = 0x0000 0040
* Core 1: 0x4845 B928 = 0x0000 0040 * Core 1: 0x4845 B928 = 0x0000 0040
*/ */
static void i913_errata(struct cal_dev *dev, unsigned int port) static void i913_errata(struct cal_dev *cal, unsigned int port)
{ {
u32 reg10 = reg_read(dev->cc[port], CAL_CSI2_PHY_REG10); u32 reg10 = reg_read(cal->cc[port], CAL_CSI2_PHY_REG10);
set_field(&reg10, 1, CAL_CSI2_PHY_REG10_I933_LDO_DISABLE_MASK); set_field(&reg10, 1, CAL_CSI2_PHY_REG10_I933_LDO_DISABLE_MASK);
cal_dbg(1, dev, "CSI2_%d_REG10 = 0x%08x\n", port, reg10); cal_dbg(1, cal, "CSI2_%d_REG10 = 0x%08x\n", port, reg10);
reg_write(dev->cc[port], CAL_CSI2_PHY_REG10, reg10); reg_write(cal->cc[port], CAL_CSI2_PHY_REG10, reg10);
} }
static void cal_quickdump_regs(struct cal_dev *dev) static void cal_quickdump_regs(struct cal_dev *cal)
{ {
cal_info(dev, "CAL Registers @ 0x%pa:\n", &dev->res->start); cal_info(cal, "CAL Registers @ 0x%pa:\n", &cal->res->start);
print_hex_dump(KERN_INFO, "", DUMP_PREFIX_OFFSET, 16, 4, print_hex_dump(KERN_INFO, "", DUMP_PREFIX_OFFSET, 16, 4,
(__force const void *)dev->base, (__force const void *)cal->base,
resource_size(dev->res), false); resource_size(cal->res), false);
if (dev->ctx[0]) { if (cal->ctx[0]) {
cal_info(dev, "CSI2 Core 0 Registers @ %pa:\n", cal_info(cal, "CSI2 Core 0 Registers @ %pa:\n",
&dev->ctx[0]->cc->res->start); &cal->ctx[0]->cc->res->start);
print_hex_dump(KERN_INFO, "", DUMP_PREFIX_OFFSET, 16, 4, print_hex_dump(KERN_INFO, "", DUMP_PREFIX_OFFSET, 16, 4,
(__force const void *)dev->ctx[0]->cc->base, (__force const void *)cal->ctx[0]->cc->base,
resource_size(dev->ctx[0]->cc->res), resource_size(cal->ctx[0]->cc->res),
false); false);
} }
if (dev->ctx[1]) { if (cal->ctx[1]) {
cal_info(dev, "CSI2 Core 1 Registers @ %pa:\n", cal_info(cal, "CSI2 Core 1 Registers @ %pa:\n",
&dev->ctx[1]->cc->res->start); &cal->ctx[1]->cc->res->start);
print_hex_dump(KERN_INFO, "", DUMP_PREFIX_OFFSET, 16, 4, print_hex_dump(KERN_INFO, "", DUMP_PREFIX_OFFSET, 16, 4,
(__force const void *)dev->ctx[1]->cc->base, (__force const void *)cal->ctx[1]->cc->base,
resource_size(dev->ctx[1]->cc->res), resource_size(cal->ctx[1]->cc->res),
false); false);
} }
} }
...@@ -676,24 +680,24 @@ static void enable_irqs(struct cal_ctx *ctx) ...@@ -676,24 +680,24 @@ static void enable_irqs(struct cal_ctx *ctx)
CAL_CSI2_COMPLEXIO_IRQ_ECC_NO_CORRECTION_MASK; CAL_CSI2_COMPLEXIO_IRQ_ECC_NO_CORRECTION_MASK;
/* Enable CIO error irqs */ /* Enable CIO error irqs */
reg_write(ctx->dev, CAL_HL_IRQENABLE_SET(0), reg_write(ctx->cal, CAL_HL_IRQENABLE_SET(0),
CAL_HL_IRQ_CIO_MASK(ctx->csi2_port)); CAL_HL_IRQ_CIO_MASK(ctx->csi2_port));
reg_write(ctx->dev, CAL_CSI2_COMPLEXIO_IRQENABLE(ctx->csi2_port), reg_write(ctx->cal, CAL_CSI2_COMPLEXIO_IRQENABLE(ctx->csi2_port),
cio_err_mask); cio_err_mask);
/* Always enable OCPO error */ /* Always enable OCPO error */
reg_write(ctx->dev, CAL_HL_IRQENABLE_SET(0), CAL_HL_IRQ_OCPO_ERR_MASK); reg_write(ctx->cal, CAL_HL_IRQENABLE_SET(0), CAL_HL_IRQ_OCPO_ERR_MASK);
/* Enable IRQ_WDMA_END 0/1 */ /* Enable IRQ_WDMA_END 0/1 */
val = 0; val = 0;
set_field(&val, 1, CAL_HL_IRQ_MASK(ctx->csi2_port)); set_field(&val, 1, CAL_HL_IRQ_MASK(ctx->csi2_port));
reg_write(ctx->dev, CAL_HL_IRQENABLE_SET(1), val); reg_write(ctx->cal, CAL_HL_IRQENABLE_SET(1), val);
/* Enable IRQ_WDMA_START 0/1 */ /* Enable IRQ_WDMA_START 0/1 */
val = 0; val = 0;
set_field(&val, 1, CAL_HL_IRQ_MASK(ctx->csi2_port)); set_field(&val, 1, CAL_HL_IRQ_MASK(ctx->csi2_port));
reg_write(ctx->dev, CAL_HL_IRQENABLE_SET(2), val); reg_write(ctx->cal, CAL_HL_IRQENABLE_SET(2), val);
/* Todo: Add VC_IRQ and CSI2_COMPLEXIO_IRQ handling */ /* Todo: Add VC_IRQ and CSI2_COMPLEXIO_IRQ handling */
reg_write(ctx->dev, CAL_CSI2_VC_IRQENABLE(0), 0xFF000000); reg_write(ctx->cal, CAL_CSI2_VC_IRQENABLE(0), 0xFF000000);
} }
static void disable_irqs(struct cal_ctx *ctx) static void disable_irqs(struct cal_ctx *ctx)
...@@ -701,21 +705,21 @@ static void disable_irqs(struct cal_ctx *ctx) ...@@ -701,21 +705,21 @@ static void disable_irqs(struct cal_ctx *ctx)
u32 val; u32 val;
/* Disable CIO error irqs */ /* Disable CIO error irqs */
reg_write(ctx->dev, CAL_HL_IRQENABLE_CLR(0), reg_write(ctx->cal, CAL_HL_IRQENABLE_CLR(0),
CAL_HL_IRQ_CIO_MASK(ctx->csi2_port)); CAL_HL_IRQ_CIO_MASK(ctx->csi2_port));
reg_write(ctx->dev, CAL_CSI2_COMPLEXIO_IRQENABLE(ctx->csi2_port), reg_write(ctx->cal, CAL_CSI2_COMPLEXIO_IRQENABLE(ctx->csi2_port),
0); 0);
/* Disable IRQ_WDMA_END 0/1 */ /* Disable IRQ_WDMA_END 0/1 */
val = 0; val = 0;
set_field(&val, 1, CAL_HL_IRQ_MASK(ctx->csi2_port)); set_field(&val, 1, CAL_HL_IRQ_MASK(ctx->csi2_port));
reg_write(ctx->dev, CAL_HL_IRQENABLE_CLR(1), val); reg_write(ctx->cal, CAL_HL_IRQENABLE_CLR(1), val);
/* Disable IRQ_WDMA_START 0/1 */ /* Disable IRQ_WDMA_START 0/1 */
val = 0; val = 0;
set_field(&val, 1, CAL_HL_IRQ_MASK(ctx->csi2_port)); set_field(&val, 1, CAL_HL_IRQ_MASK(ctx->csi2_port));
reg_write(ctx->dev, CAL_HL_IRQENABLE_CLR(2), val); reg_write(ctx->cal, CAL_HL_IRQENABLE_CLR(2), val);
/* Todo: Add VC_IRQ and CSI2_COMPLEXIO_IRQ handling */ /* Todo: Add VC_IRQ and CSI2_COMPLEXIO_IRQ handling */
reg_write(ctx->dev, CAL_CSI2_VC_IRQENABLE(0), 0); reg_write(ctx->cal, CAL_CSI2_VC_IRQENABLE(0), 0);
} }
static void csi2_cio_power(struct cal_ctx *ctx, bool enable) static void csi2_cio_power(struct cal_ctx *ctx, bool enable)
...@@ -726,13 +730,13 @@ static void csi2_cio_power(struct cal_ctx *ctx, bool enable) ...@@ -726,13 +730,13 @@ static void csi2_cio_power(struct cal_ctx *ctx, bool enable)
target_state = enable ? CAL_CSI2_COMPLEXIO_CFG_PWR_CMD_STATE_ON : target_state = enable ? CAL_CSI2_COMPLEXIO_CFG_PWR_CMD_STATE_ON :
CAL_CSI2_COMPLEXIO_CFG_PWR_CMD_STATE_OFF; CAL_CSI2_COMPLEXIO_CFG_PWR_CMD_STATE_OFF;
reg_write_field(ctx->dev, CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port), reg_write_field(ctx->cal, CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port),
target_state, CAL_CSI2_COMPLEXIO_CFG_PWR_CMD_MASK); target_state, CAL_CSI2_COMPLEXIO_CFG_PWR_CMD_MASK);
for (i = 0; i < 10; i++) { for (i = 0; i < 10; i++) {
u32 current_state; u32 current_state;
current_state = reg_read_field(ctx->dev, current_state = reg_read_field(ctx->cal,
CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port), CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port),
CAL_CSI2_COMPLEXIO_CFG_PWR_STATUS_MASK); CAL_CSI2_COMPLEXIO_CFG_PWR_STATUS_MASK);
...@@ -822,12 +826,12 @@ static void csi2_phy_init(struct cal_ctx *ctx) ...@@ -822,12 +826,12 @@ static void csi2_phy_init(struct cal_ctx *ctx)
camerarx_phy_enable(ctx); camerarx_phy_enable(ctx);
/* 2. Reset complex IO - Do not wait for reset completion */ /* 2. Reset complex IO - Do not wait for reset completion */
reg_write_field(ctx->dev, CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port), reg_write_field(ctx->cal, CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port),
CAL_CSI2_COMPLEXIO_CFG_RESET_CTRL_OPERATIONAL, CAL_CSI2_COMPLEXIO_CFG_RESET_CTRL_OPERATIONAL,
CAL_CSI2_COMPLEXIO_CFG_RESET_CTRL_MASK); CAL_CSI2_COMPLEXIO_CFG_RESET_CTRL_MASK);
ctx_dbg(3, ctx, "CAL_CSI2_COMPLEXIO_CFG(%d) = 0x%08x De-assert Complex IO Reset\n", ctx_dbg(3, ctx, "CAL_CSI2_COMPLEXIO_CFG(%d) = 0x%08x De-assert Complex IO Reset\n",
ctx->csi2_port, ctx->csi2_port,
reg_read(ctx->dev, CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port))); reg_read(ctx->cal, CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port)));
/* Dummy read to allow SCP reset to complete */ /* Dummy read to allow SCP reset to complete */
reg_read(ctx->cc, CAL_CSI2_PHY_REG0); reg_read(ctx->cc, CAL_CSI2_PHY_REG0);
...@@ -844,23 +848,23 @@ static void csi2_phy_init(struct cal_ctx *ctx) ...@@ -844,23 +848,23 @@ static void csi2_phy_init(struct cal_ctx *ctx)
* Stop-state-timeout must be more than 100us as per CSI2 spec, so we * Stop-state-timeout must be more than 100us as per CSI2 spec, so we
* calculate a timeout that's 100us (rounding up). * calculate a timeout that's 100us (rounding up).
*/ */
sscounter = DIV_ROUND_UP(clk_get_rate(ctx->dev->fclk), 10000 * 16 * 4); sscounter = DIV_ROUND_UP(clk_get_rate(ctx->cal->fclk), 10000 * 16 * 4);
val = reg_read(ctx->dev, CAL_CSI2_TIMING(ctx->csi2_port)); val = reg_read(ctx->cal, CAL_CSI2_TIMING(ctx->csi2_port));
set_field(&val, 1, CAL_CSI2_TIMING_STOP_STATE_X16_IO1_MASK); set_field(&val, 1, CAL_CSI2_TIMING_STOP_STATE_X16_IO1_MASK);
set_field(&val, 1, CAL_CSI2_TIMING_STOP_STATE_X4_IO1_MASK); set_field(&val, 1, CAL_CSI2_TIMING_STOP_STATE_X4_IO1_MASK);
set_field(&val, sscounter, CAL_CSI2_TIMING_STOP_STATE_COUNTER_IO1_MASK); set_field(&val, sscounter, CAL_CSI2_TIMING_STOP_STATE_COUNTER_IO1_MASK);
reg_write(ctx->dev, CAL_CSI2_TIMING(ctx->csi2_port), val); reg_write(ctx->cal, CAL_CSI2_TIMING(ctx->csi2_port), val);
ctx_dbg(3, ctx, "CAL_CSI2_TIMING(%d) = 0x%08x Stop States\n", ctx_dbg(3, ctx, "CAL_CSI2_TIMING(%d) = 0x%08x Stop States\n",
ctx->csi2_port, ctx->csi2_port,
reg_read(ctx->dev, CAL_CSI2_TIMING(ctx->csi2_port))); reg_read(ctx->cal, CAL_CSI2_TIMING(ctx->csi2_port)));
/* 4. Force FORCERXMODE */ /* 4. Force FORCERXMODE */
reg_write_field(ctx->dev, CAL_CSI2_TIMING(ctx->csi2_port), reg_write_field(ctx->cal, CAL_CSI2_TIMING(ctx->csi2_port),
1, CAL_CSI2_TIMING_FORCE_RX_MODE_IO1_MASK); 1, CAL_CSI2_TIMING_FORCE_RX_MODE_IO1_MASK);
ctx_dbg(3, ctx, "CAL_CSI2_TIMING(%d) = 0x%08x Force RXMODE\n", ctx_dbg(3, ctx, "CAL_CSI2_TIMING(%d) = 0x%08x Force RXMODE\n",
ctx->csi2_port, ctx->csi2_port,
reg_read(ctx->dev, CAL_CSI2_TIMING(ctx->csi2_port))); reg_read(ctx->cal, CAL_CSI2_TIMING(ctx->csi2_port)));
/* E. Power up the PHY using the complex IO */ /* E. Power up the PHY using the complex IO */
csi2_cio_power(ctx, true); csi2_cio_power(ctx, true);
...@@ -872,7 +876,7 @@ static void csi2_wait_complexio_reset(struct cal_ctx *ctx) ...@@ -872,7 +876,7 @@ static void csi2_wait_complexio_reset(struct cal_ctx *ctx)
timeout = jiffies + msecs_to_jiffies(750); timeout = jiffies + msecs_to_jiffies(750);
while (time_before(jiffies, timeout)) { while (time_before(jiffies, timeout)) {
if (reg_read_field(ctx->dev, if (reg_read_field(ctx->cal,
CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port), CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port),
CAL_CSI2_COMPLEXIO_CFG_RESET_DONE_MASK) == CAL_CSI2_COMPLEXIO_CFG_RESET_DONE_MASK) ==
CAL_CSI2_COMPLEXIO_CFG_RESET_DONE_RESETCOMPLETED) CAL_CSI2_COMPLEXIO_CFG_RESET_DONE_RESETCOMPLETED)
...@@ -880,7 +884,7 @@ static void csi2_wait_complexio_reset(struct cal_ctx *ctx) ...@@ -880,7 +884,7 @@ static void csi2_wait_complexio_reset(struct cal_ctx *ctx)
usleep_range(500, 5000); usleep_range(500, 5000);
} }
if (reg_read_field(ctx->dev, CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port), if (reg_read_field(ctx->cal, CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port),
CAL_CSI2_COMPLEXIO_CFG_RESET_DONE_MASK) != CAL_CSI2_COMPLEXIO_CFG_RESET_DONE_MASK) !=
CAL_CSI2_COMPLEXIO_CFG_RESET_DONE_RESETCOMPLETED) CAL_CSI2_COMPLEXIO_CFG_RESET_DONE_RESETCOMPLETED)
ctx_err(ctx, "Timeout waiting for Complex IO reset done\n"); ctx_err(ctx, "Timeout waiting for Complex IO reset done\n");
...@@ -892,14 +896,14 @@ static void csi2_wait_stop_state(struct cal_ctx *ctx) ...@@ -892,14 +896,14 @@ static void csi2_wait_stop_state(struct cal_ctx *ctx)
timeout = jiffies + msecs_to_jiffies(750); timeout = jiffies + msecs_to_jiffies(750);
while (time_before(jiffies, timeout)) { while (time_before(jiffies, timeout)) {
if (reg_read_field(ctx->dev, if (reg_read_field(ctx->cal,
CAL_CSI2_TIMING(ctx->csi2_port), CAL_CSI2_TIMING(ctx->csi2_port),
CAL_CSI2_TIMING_FORCE_RX_MODE_IO1_MASK) == 0) CAL_CSI2_TIMING_FORCE_RX_MODE_IO1_MASK) == 0)
break; break;
usleep_range(500, 5000); usleep_range(500, 5000);
} }
if (reg_read_field(ctx->dev, CAL_CSI2_TIMING(ctx->csi2_port), if (reg_read_field(ctx->cal, CAL_CSI2_TIMING(ctx->csi2_port),
CAL_CSI2_TIMING_FORCE_RX_MODE_IO1_MASK) != 0) CAL_CSI2_TIMING_FORCE_RX_MODE_IO1_MASK) != 0)
ctx_err(ctx, "Timeout waiting for stop state\n"); ctx_err(ctx, "Timeout waiting for stop state\n");
} }
...@@ -932,13 +936,13 @@ static void csi2_phy_deinit(struct cal_ctx *ctx) ...@@ -932,13 +936,13 @@ static void csi2_phy_deinit(struct cal_ctx *ctx)
csi2_cio_power(ctx, false); csi2_cio_power(ctx, false);
/* Assert Comple IO Reset */ /* Assert Comple IO Reset */
reg_write_field(ctx->dev, CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port), reg_write_field(ctx->cal, CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port),
CAL_CSI2_COMPLEXIO_CFG_RESET_CTRL, CAL_CSI2_COMPLEXIO_CFG_RESET_CTRL,
CAL_CSI2_COMPLEXIO_CFG_RESET_CTRL_MASK); CAL_CSI2_COMPLEXIO_CFG_RESET_CTRL_MASK);
/* Wait for power down completion */ /* Wait for power down completion */
for (i = 0; i < 10; i++) { for (i = 0; i < 10; i++) {
if (reg_read_field(ctx->dev, if (reg_read_field(ctx->cal,
CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port), CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port),
CAL_CSI2_COMPLEXIO_CFG_RESET_DONE_MASK) == CAL_CSI2_COMPLEXIO_CFG_RESET_DONE_MASK) ==
CAL_CSI2_COMPLEXIO_CFG_RESET_DONE_RESETONGOING) CAL_CSI2_COMPLEXIO_CFG_RESET_DONE_RESETONGOING)
...@@ -947,7 +951,7 @@ static void csi2_phy_deinit(struct cal_ctx *ctx) ...@@ -947,7 +951,7 @@ static void csi2_phy_deinit(struct cal_ctx *ctx)
} }
ctx_dbg(3, ctx, "CAL_CSI2_COMPLEXIO_CFG(%d) = 0x%08x Complex IO in Reset (%d) %s\n", ctx_dbg(3, ctx, "CAL_CSI2_COMPLEXIO_CFG(%d) = 0x%08x Complex IO in Reset (%d) %s\n",
ctx->csi2_port, ctx->csi2_port,
reg_read(ctx->dev, CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port)), i, reg_read(ctx->cal, CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port)), i,
(i >= 10) ? "(timeout)" : ""); (i >= 10) ? "(timeout)" : "");
/* Disable the phy */ /* Disable the phy */
...@@ -956,7 +960,7 @@ static void csi2_phy_deinit(struct cal_ctx *ctx) ...@@ -956,7 +960,7 @@ static void csi2_phy_deinit(struct cal_ctx *ctx)
static void csi2_lane_config(struct cal_ctx *ctx) static void csi2_lane_config(struct cal_ctx *ctx)
{ {
u32 val = reg_read(ctx->dev, CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port)); u32 val = reg_read(ctx->cal, CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port));
u32 lane_mask = CAL_CSI2_COMPLEXIO_CFG_CLOCK_POSITION_MASK; u32 lane_mask = CAL_CSI2_COMPLEXIO_CFG_CLOCK_POSITION_MASK;
u32 polarity_mask = CAL_CSI2_COMPLEXIO_CFG_CLOCK_POL_MASK; u32 polarity_mask = CAL_CSI2_COMPLEXIO_CFG_CLOCK_POL_MASK;
struct v4l2_fwnode_bus_mipi_csi2 *mipi_csi2 = struct v4l2_fwnode_bus_mipi_csi2 *mipi_csi2 =
...@@ -977,21 +981,21 @@ static void csi2_lane_config(struct cal_ctx *ctx) ...@@ -977,21 +981,21 @@ static void csi2_lane_config(struct cal_ctx *ctx)
polarity_mask); polarity_mask);
} }
reg_write(ctx->dev, CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port), val); reg_write(ctx->cal, CAL_CSI2_COMPLEXIO_CFG(ctx->csi2_port), val);
ctx_dbg(3, ctx, "CAL_CSI2_COMPLEXIO_CFG(%d) = 0x%08x\n", ctx_dbg(3, ctx, "CAL_CSI2_COMPLEXIO_CFG(%d) = 0x%08x\n",
ctx->csi2_port, val); ctx->csi2_port, val);
} }
static void csi2_ppi_enable(struct cal_ctx *ctx) static void csi2_ppi_enable(struct cal_ctx *ctx)
{ {
reg_write(ctx->dev, CAL_CSI2_PPI_CTRL(ctx->csi2_port), BIT(3)); reg_write(ctx->cal, CAL_CSI2_PPI_CTRL(ctx->csi2_port), BIT(3));
reg_write_field(ctx->dev, CAL_CSI2_PPI_CTRL(ctx->csi2_port), reg_write_field(ctx->cal, CAL_CSI2_PPI_CTRL(ctx->csi2_port),
1, CAL_CSI2_PPI_CTRL_IF_EN_MASK); 1, CAL_CSI2_PPI_CTRL_IF_EN_MASK);
} }
static void csi2_ppi_disable(struct cal_ctx *ctx) static void csi2_ppi_disable(struct cal_ctx *ctx)
{ {
reg_write_field(ctx->dev, CAL_CSI2_PPI_CTRL(ctx->csi2_port), reg_write_field(ctx->cal, CAL_CSI2_PPI_CTRL(ctx->csi2_port),
0, CAL_CSI2_PPI_CTRL_IF_EN_MASK); 0, CAL_CSI2_PPI_CTRL_IF_EN_MASK);
} }
...@@ -999,7 +1003,7 @@ static void csi2_ctx_config(struct cal_ctx *ctx) ...@@ -999,7 +1003,7 @@ static void csi2_ctx_config(struct cal_ctx *ctx)
{ {
u32 val; u32 val;
val = reg_read(ctx->dev, CAL_CSI2_CTX0(ctx->csi2_port)); val = reg_read(ctx->cal, CAL_CSI2_CTX0(ctx->csi2_port));
set_field(&val, ctx->cport, CAL_CSI2_CTX_CPORT_MASK); set_field(&val, ctx->cport, CAL_CSI2_CTX_CPORT_MASK);
/* /*
* DT type: MIPI CSI-2 Specs * DT type: MIPI CSI-2 Specs
...@@ -1016,9 +1020,9 @@ static void csi2_ctx_config(struct cal_ctx *ctx) ...@@ -1016,9 +1020,9 @@ static void csi2_ctx_config(struct cal_ctx *ctx)
set_field(&val, CAL_CSI2_CTX_ATT_PIX, CAL_CSI2_CTX_ATT_MASK); set_field(&val, CAL_CSI2_CTX_ATT_PIX, CAL_CSI2_CTX_ATT_MASK);
set_field(&val, CAL_CSI2_CTX_PACK_MODE_LINE, set_field(&val, CAL_CSI2_CTX_PACK_MODE_LINE,
CAL_CSI2_CTX_PACK_MODE_MASK); CAL_CSI2_CTX_PACK_MODE_MASK);
reg_write(ctx->dev, CAL_CSI2_CTX0(ctx->csi2_port), val); reg_write(ctx->cal, CAL_CSI2_CTX0(ctx->csi2_port), val);
ctx_dbg(3, ctx, "CAL_CSI2_CTX0(%d) = 0x%08x\n", ctx->csi2_port, ctx_dbg(3, ctx, "CAL_CSI2_CTX0(%d) = 0x%08x\n", ctx->csi2_port,
reg_read(ctx->dev, CAL_CSI2_CTX0(ctx->csi2_port))); reg_read(ctx->cal, CAL_CSI2_CTX0(ctx->csi2_port)));
} }
static void pix_proc_config(struct cal_ctx *ctx) static void pix_proc_config(struct cal_ctx *ctx)
...@@ -1052,7 +1056,7 @@ static void pix_proc_config(struct cal_ctx *ctx) ...@@ -1052,7 +1056,7 @@ static void pix_proc_config(struct cal_ctx *ctx)
* *
* Instead of failing here just use 8 bpp as a default. * Instead of failing here just use 8 bpp as a default.
*/ */
dev_warn_once(&ctx->dev->pdev->dev, dev_warn_once(&ctx->cal->pdev->dev,
"%s:%d:%s: bpp:%d unsupported! Overwritten with 8.\n", "%s:%d:%s: bpp:%d unsupported! Overwritten with 8.\n",
__FILE__, __LINE__, __func__, ctx->fmt->bpp); __FILE__, __LINE__, __func__, ctx->fmt->bpp);
extract = CAL_PIX_PROC_EXTRACT_B8; extract = CAL_PIX_PROC_EXTRACT_B8;
...@@ -1060,16 +1064,16 @@ static void pix_proc_config(struct cal_ctx *ctx) ...@@ -1060,16 +1064,16 @@ static void pix_proc_config(struct cal_ctx *ctx)
break; break;
} }
val = reg_read(ctx->dev, CAL_PIX_PROC(ctx->csi2_port)); val = reg_read(ctx->cal, CAL_PIX_PROC(ctx->csi2_port));
set_field(&val, extract, CAL_PIX_PROC_EXTRACT_MASK); set_field(&val, extract, CAL_PIX_PROC_EXTRACT_MASK);
set_field(&val, CAL_PIX_PROC_DPCMD_BYPASS, CAL_PIX_PROC_DPCMD_MASK); set_field(&val, CAL_PIX_PROC_DPCMD_BYPASS, CAL_PIX_PROC_DPCMD_MASK);
set_field(&val, CAL_PIX_PROC_DPCME_BYPASS, CAL_PIX_PROC_DPCME_MASK); set_field(&val, CAL_PIX_PROC_DPCME_BYPASS, CAL_PIX_PROC_DPCME_MASK);
set_field(&val, pack, CAL_PIX_PROC_PACK_MASK); set_field(&val, pack, CAL_PIX_PROC_PACK_MASK);
set_field(&val, ctx->cport, CAL_PIX_PROC_CPORT_MASK); set_field(&val, ctx->cport, CAL_PIX_PROC_CPORT_MASK);
set_field(&val, 1, CAL_PIX_PROC_EN_MASK); set_field(&val, 1, CAL_PIX_PROC_EN_MASK);
reg_write(ctx->dev, CAL_PIX_PROC(ctx->csi2_port), val); reg_write(ctx->cal, CAL_PIX_PROC(ctx->csi2_port), val);
ctx_dbg(3, ctx, "CAL_PIX_PROC(%d) = 0x%08x\n", ctx->csi2_port, ctx_dbg(3, ctx, "CAL_PIX_PROC(%d) = 0x%08x\n", ctx->csi2_port,
reg_read(ctx->dev, CAL_PIX_PROC(ctx->csi2_port))); reg_read(ctx->cal, CAL_PIX_PROC(ctx->csi2_port)));
} }
static void cal_wr_dma_config(struct cal_ctx *ctx, static void cal_wr_dma_config(struct cal_ctx *ctx,
...@@ -1077,7 +1081,7 @@ static void cal_wr_dma_config(struct cal_ctx *ctx, ...@@ -1077,7 +1081,7 @@ static void cal_wr_dma_config(struct cal_ctx *ctx,
{ {
u32 val; u32 val;
val = reg_read(ctx->dev, CAL_WR_DMA_CTRL(ctx->csi2_port)); val = reg_read(ctx->cal, CAL_WR_DMA_CTRL(ctx->csi2_port));
set_field(&val, ctx->cport, CAL_WR_DMA_CTRL_CPORT_MASK); set_field(&val, ctx->cport, CAL_WR_DMA_CTRL_CPORT_MASK);
set_field(&val, height, CAL_WR_DMA_CTRL_YSIZE_MASK); set_field(&val, height, CAL_WR_DMA_CTRL_YSIZE_MASK);
set_field(&val, CAL_WR_DMA_CTRL_DTAG_PIX_DAT, set_field(&val, CAL_WR_DMA_CTRL_DTAG_PIX_DAT,
...@@ -1087,22 +1091,22 @@ static void cal_wr_dma_config(struct cal_ctx *ctx, ...@@ -1087,22 +1091,22 @@ static void cal_wr_dma_config(struct cal_ctx *ctx,
set_field(&val, CAL_WR_DMA_CTRL_PATTERN_LINEAR, set_field(&val, CAL_WR_DMA_CTRL_PATTERN_LINEAR,
CAL_WR_DMA_CTRL_PATTERN_MASK); CAL_WR_DMA_CTRL_PATTERN_MASK);
set_field(&val, 1, CAL_WR_DMA_CTRL_STALL_RD_MASK); set_field(&val, 1, CAL_WR_DMA_CTRL_STALL_RD_MASK);
reg_write(ctx->dev, CAL_WR_DMA_CTRL(ctx->csi2_port), val); reg_write(ctx->cal, CAL_WR_DMA_CTRL(ctx->csi2_port), val);
ctx_dbg(3, ctx, "CAL_WR_DMA_CTRL(%d) = 0x%08x\n", ctx->csi2_port, ctx_dbg(3, ctx, "CAL_WR_DMA_CTRL(%d) = 0x%08x\n", ctx->csi2_port,
reg_read(ctx->dev, CAL_WR_DMA_CTRL(ctx->csi2_port))); reg_read(ctx->cal, CAL_WR_DMA_CTRL(ctx->csi2_port)));
/* /*
* width/16 not sure but giving it a whirl. * width/16 not sure but giving it a whirl.
* zero does not work right * zero does not work right
*/ */
reg_write_field(ctx->dev, reg_write_field(ctx->cal,
CAL_WR_DMA_OFST(ctx->csi2_port), CAL_WR_DMA_OFST(ctx->csi2_port),
(width / 16), (width / 16),
CAL_WR_DMA_OFST_MASK); CAL_WR_DMA_OFST_MASK);
ctx_dbg(3, ctx, "CAL_WR_DMA_OFST(%d) = 0x%08x\n", ctx->csi2_port, ctx_dbg(3, ctx, "CAL_WR_DMA_OFST(%d) = 0x%08x\n", ctx->csi2_port,
reg_read(ctx->dev, CAL_WR_DMA_OFST(ctx->csi2_port))); reg_read(ctx->cal, CAL_WR_DMA_OFST(ctx->csi2_port)));
val = reg_read(ctx->dev, CAL_WR_DMA_XSIZE(ctx->csi2_port)); val = reg_read(ctx->cal, CAL_WR_DMA_XSIZE(ctx->csi2_port));
/* 64 bit word means no skipping */ /* 64 bit word means no skipping */
set_field(&val, 0, CAL_WR_DMA_XSIZE_XSKIP_MASK); set_field(&val, 0, CAL_WR_DMA_XSIZE_XSKIP_MASK);
/* /*
...@@ -1111,24 +1115,24 @@ static void cal_wr_dma_config(struct cal_ctx *ctx, ...@@ -1111,24 +1115,24 @@ static void cal_wr_dma_config(struct cal_ctx *ctx,
* is detected automagically * is detected automagically
*/ */
set_field(&val, (width / 8), CAL_WR_DMA_XSIZE_MASK); set_field(&val, (width / 8), CAL_WR_DMA_XSIZE_MASK);
reg_write(ctx->dev, CAL_WR_DMA_XSIZE(ctx->csi2_port), val); reg_write(ctx->cal, CAL_WR_DMA_XSIZE(ctx->csi2_port), val);
ctx_dbg(3, ctx, "CAL_WR_DMA_XSIZE(%d) = 0x%08x\n", ctx->csi2_port, ctx_dbg(3, ctx, "CAL_WR_DMA_XSIZE(%d) = 0x%08x\n", ctx->csi2_port,
reg_read(ctx->dev, CAL_WR_DMA_XSIZE(ctx->csi2_port))); reg_read(ctx->cal, CAL_WR_DMA_XSIZE(ctx->csi2_port)));
val = reg_read(ctx->dev, CAL_CTRL); val = reg_read(ctx->cal, CAL_CTRL);
set_field(&val, CAL_CTRL_BURSTSIZE_BURST128, CAL_CTRL_BURSTSIZE_MASK); set_field(&val, CAL_CTRL_BURSTSIZE_BURST128, CAL_CTRL_BURSTSIZE_MASK);
set_field(&val, 0xF, CAL_CTRL_TAGCNT_MASK); set_field(&val, 0xF, CAL_CTRL_TAGCNT_MASK);
set_field(&val, CAL_CTRL_POSTED_WRITES_NONPOSTED, set_field(&val, CAL_CTRL_POSTED_WRITES_NONPOSTED,
CAL_CTRL_POSTED_WRITES_MASK); CAL_CTRL_POSTED_WRITES_MASK);
set_field(&val, 0xFF, CAL_CTRL_MFLAGL_MASK); set_field(&val, 0xFF, CAL_CTRL_MFLAGL_MASK);
set_field(&val, 0xFF, CAL_CTRL_MFLAGH_MASK); set_field(&val, 0xFF, CAL_CTRL_MFLAGH_MASK);
reg_write(ctx->dev, CAL_CTRL, val); reg_write(ctx->cal, CAL_CTRL, val);
ctx_dbg(3, ctx, "CAL_CTRL = 0x%08x\n", reg_read(ctx->dev, CAL_CTRL)); ctx_dbg(3, ctx, "CAL_CTRL = 0x%08x\n", reg_read(ctx->cal, CAL_CTRL));
} }
static void cal_wr_dma_addr(struct cal_ctx *ctx, unsigned int dmaaddr) static void cal_wr_dma_addr(struct cal_ctx *ctx, unsigned int dmaaddr)
{ {
reg_write(ctx->dev, CAL_WR_DMA_ADDR(ctx->csi2_port), dmaaddr); reg_write(ctx->cal, CAL_WR_DMA_ADDR(ctx->csi2_port), dmaaddr);
} }
static int cal_get_external_info(struct cal_ctx *ctx) static int cal_get_external_info(struct cal_ctx *ctx)
...@@ -1182,45 +1186,45 @@ static inline void cal_process_buffer_complete(struct cal_ctx *ctx) ...@@ -1182,45 +1186,45 @@ static inline void cal_process_buffer_complete(struct cal_ctx *ctx)
static irqreturn_t cal_irq(int irq_cal, void *data) static irqreturn_t cal_irq(int irq_cal, void *data)
{ {
struct cal_dev *dev = data; struct cal_dev *cal = data;
struct cal_ctx *ctx; struct cal_ctx *ctx;
struct cal_dmaqueue *dma_q; struct cal_dmaqueue *dma_q;
u32 status; u32 status;
status = reg_read(dev, CAL_HL_IRQSTATUS(0)); status = reg_read(cal, CAL_HL_IRQSTATUS(0));
if (status) { if (status) {
unsigned int i; unsigned int i;
reg_write(dev, CAL_HL_IRQSTATUS(0), status); reg_write(cal, CAL_HL_IRQSTATUS(0), status);
if (status & CAL_HL_IRQ_OCPO_ERR_MASK) if (status & CAL_HL_IRQ_OCPO_ERR_MASK)
dev_err_ratelimited(&dev->pdev->dev, "OCPO ERROR\n"); dev_err_ratelimited(&cal->pdev->dev, "OCPO ERROR\n");
for (i = 0; i < 2; ++i) { for (i = 0; i < 2; ++i) {
if (status & CAL_HL_IRQ_CIO_MASK(i)) { if (status & CAL_HL_IRQ_CIO_MASK(i)) {
u32 cio_stat = reg_read(dev, u32 cio_stat = reg_read(cal,
CAL_CSI2_COMPLEXIO_IRQSTATUS(i)); CAL_CSI2_COMPLEXIO_IRQSTATUS(i));
dev_err_ratelimited(&dev->pdev->dev, dev_err_ratelimited(&cal->pdev->dev,
"CIO%u error: %#08x\n", i, cio_stat); "CIO%u error: %#08x\n", i, cio_stat);
reg_write(dev, CAL_CSI2_COMPLEXIO_IRQSTATUS(i), reg_write(cal, CAL_CSI2_COMPLEXIO_IRQSTATUS(i),
cio_stat); cio_stat);
} }
} }
} }
/* Check which DMA just finished */ /* Check which DMA just finished */
status = reg_read(dev, CAL_HL_IRQSTATUS(1)); status = reg_read(cal, CAL_HL_IRQSTATUS(1));
if (status) { if (status) {
unsigned int i; unsigned int i;
/* Clear Interrupt status */ /* Clear Interrupt status */
reg_write(dev, CAL_HL_IRQSTATUS(1), status); reg_write(cal, CAL_HL_IRQSTATUS(1), status);
for (i = 0; i < 2; ++i) { for (i = 0; i < 2; ++i) {
if (isportirqset(status, i)) { if (isportirqset(status, i)) {
ctx = dev->ctx[i]; ctx = cal->ctx[i];
spin_lock(&ctx->slock); spin_lock(&ctx->slock);
ctx->dma_act = false; ctx->dma_act = false;
...@@ -1234,16 +1238,16 @@ static irqreturn_t cal_irq(int irq_cal, void *data) ...@@ -1234,16 +1238,16 @@ static irqreturn_t cal_irq(int irq_cal, void *data)
} }
/* Check which DMA just started */ /* Check which DMA just started */
status = reg_read(dev, CAL_HL_IRQSTATUS(2)); status = reg_read(cal, CAL_HL_IRQSTATUS(2));
if (status) { if (status) {
unsigned int i; unsigned int i;
/* Clear Interrupt status */ /* Clear Interrupt status */
reg_write(dev, CAL_HL_IRQSTATUS(2), status); reg_write(cal, CAL_HL_IRQSTATUS(2), status);
for (i = 0; i < 2; ++i) { for (i = 0; i < 2; ++i) {
if (isportirqset(status, i)) { if (isportirqset(status, i)) {
ctx = dev->ctx[i]; ctx = cal->ctx[i];
dma_q = &ctx->vidq; dma_q = &ctx->vidq;
spin_lock(&ctx->slock); spin_lock(&ctx->slock);
...@@ -1667,7 +1671,7 @@ static int cal_start_streaming(struct vb2_queue *vq, unsigned int count) ...@@ -1667,7 +1671,7 @@ static int cal_start_streaming(struct vb2_queue *vq, unsigned int count)
goto err; goto err;
} }
pm_runtime_get_sync(&ctx->dev->pdev->dev); pm_runtime_get_sync(&ctx->cal->pdev->dev);
csi2_ctx_config(ctx); csi2_ctx_config(ctx);
pix_proc_config(ctx); pix_proc_config(ctx);
...@@ -1682,7 +1686,7 @@ static int cal_start_streaming(struct vb2_queue *vq, unsigned int count) ...@@ -1682,7 +1686,7 @@ static int cal_start_streaming(struct vb2_queue *vq, unsigned int count)
if (ret) { if (ret) {
v4l2_subdev_call(ctx->sensor, core, s_power, 0); v4l2_subdev_call(ctx->sensor, core, s_power, 0);
ctx_err(ctx, "stream on failed in subdev\n"); ctx_err(ctx, "stream on failed in subdev\n");
pm_runtime_put_sync(&ctx->dev->pdev->dev); pm_runtime_put_sync(&ctx->cal->pdev->dev);
goto err; goto err;
} }
...@@ -1691,7 +1695,7 @@ static int cal_start_streaming(struct vb2_queue *vq, unsigned int count) ...@@ -1691,7 +1695,7 @@ static int cal_start_streaming(struct vb2_queue *vq, unsigned int count)
csi2_ppi_enable(ctx); csi2_ppi_enable(ctx);
if (debug >= 4) if (debug >= 4)
cal_quickdump_regs(ctx->dev); cal_quickdump_regs(ctx->cal);
return 0; return 0;
...@@ -1762,7 +1766,7 @@ static void cal_stop_streaming(struct vb2_queue *vq) ...@@ -1762,7 +1766,7 @@ static void cal_stop_streaming(struct vb2_queue *vq)
ctx->next_frm = NULL; ctx->next_frm = NULL;
spin_unlock_irqrestore(&ctx->slock, flags); spin_unlock_irqrestore(&ctx->slock, flags);
pm_runtime_put_sync(&ctx->dev->pdev->dev); pm_runtime_put_sync(&ctx->cal->pdev->dev);
} }
static const struct vb2_ops cal_video_qops = { static const struct vb2_ops cal_video_qops = {
...@@ -2037,7 +2041,7 @@ of_get_next_endpoint(const struct device_node *parent, ...@@ -2037,7 +2041,7 @@ of_get_next_endpoint(const struct device_node *parent,
static int of_cal_create_instance(struct cal_ctx *ctx, int inst) static int of_cal_create_instance(struct cal_ctx *ctx, int inst)
{ {
struct platform_device *pdev = ctx->dev->pdev; struct platform_device *pdev = ctx->cal->pdev;
struct device_node *ep_node, *port, *sensor_node, *parent; struct device_node *ep_node, *port, *sensor_node, *parent;
struct v4l2_fwnode_endpoint *endpoint; struct v4l2_fwnode_endpoint *endpoint;
struct v4l2_async_subdev *asd; struct v4l2_async_subdev *asd;
...@@ -2160,22 +2164,22 @@ static int of_cal_create_instance(struct cal_ctx *ctx, int inst) ...@@ -2160,22 +2164,22 @@ static int of_cal_create_instance(struct cal_ctx *ctx, int inst)
return ret; return ret;
} }
static struct cal_ctx *cal_create_instance(struct cal_dev *dev, int inst) static struct cal_ctx *cal_create_instance(struct cal_dev *cal, int inst)
{ {
struct cal_ctx *ctx; struct cal_ctx *ctx;
struct v4l2_ctrl_handler *hdl; struct v4l2_ctrl_handler *hdl;
int ret; int ret;
ctx = devm_kzalloc(&dev->pdev->dev, sizeof(*ctx), GFP_KERNEL); ctx = devm_kzalloc(&cal->pdev->dev, sizeof(*ctx), GFP_KERNEL);
if (!ctx) if (!ctx)
return NULL; return NULL;
/* save the cal_dev * for future ref */ /* save the cal_dev * for future ref */
ctx->dev = dev; ctx->cal = cal;
snprintf(ctx->v4l2_dev.name, sizeof(ctx->v4l2_dev.name), snprintf(ctx->v4l2_dev.name, sizeof(ctx->v4l2_dev.name),
"%s-%03d", CAL_MODULE_NAME, inst); "%s-%03d", CAL_MODULE_NAME, inst);
ret = v4l2_device_register(&dev->pdev->dev, &ctx->v4l2_dev); ret = v4l2_device_register(&cal->pdev->dev, &ctx->v4l2_dev);
if (ret) if (ret)
goto err_exit; goto err_exit;
...@@ -2188,7 +2192,7 @@ static struct cal_ctx *cal_create_instance(struct cal_dev *dev, int inst) ...@@ -2188,7 +2192,7 @@ static struct cal_ctx *cal_create_instance(struct cal_dev *dev, int inst)
ctx->v4l2_dev.ctrl_handler = hdl; ctx->v4l2_dev.ctrl_handler = hdl;
/* Make sure Camera Core H/W register area is available */ /* Make sure Camera Core H/W register area is available */
ctx->cc = dev->cc[inst]; ctx->cc = cal->cc[inst];
/* Store the instance id */ /* Store the instance id */
ctx->csi2_port = inst; ctx->csi2_port = inst;
...@@ -2232,7 +2236,7 @@ MODULE_DEVICE_TABLE(of, cal_of_match); ...@@ -2232,7 +2236,7 @@ MODULE_DEVICE_TABLE(of, cal_of_match);
static int cal_probe(struct platform_device *pdev) static int cal_probe(struct platform_device *pdev)
{ {
struct cal_dev *dev; struct cal_dev *cal;
struct cal_ctx *ctx; struct cal_ctx *ctx;
struct device_node *parent = pdev->dev.of_node; struct device_node *parent = pdev->dev.of_node;
struct regmap *syscon_camerrx; struct regmap *syscon_camerrx;
...@@ -2241,27 +2245,27 @@ static int cal_probe(struct platform_device *pdev) ...@@ -2241,27 +2245,27 @@ static int cal_probe(struct platform_device *pdev)
int ret; int ret;
int irq; int irq;
dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); cal = devm_kzalloc(&pdev->dev, sizeof(*cal), GFP_KERNEL);
if (!dev) if (!cal)
return -ENOMEM; return -ENOMEM;
dev->data = of_device_get_match_data(&pdev->dev); cal->data = of_device_get_match_data(&pdev->dev);
if (!dev->data) { if (!cal->data) {
dev_err(&pdev->dev, "Could not get feature data based on compatible version\n"); dev_err(&pdev->dev, "Could not get feature data based on compatible version\n");
return -ENODEV; return -ENODEV;
} }
/* set pseudo v4l2 device name so we can use v4l2_printk */ /* set pseudo v4l2 device name so we can use v4l2_printk */
strscpy(dev->v4l2_dev.name, CAL_MODULE_NAME, strscpy(cal->v4l2_dev.name, CAL_MODULE_NAME,
sizeof(dev->v4l2_dev.name)); sizeof(cal->v4l2_dev.name));
/* save pdev pointer */ /* save pdev pointer */
dev->pdev = pdev; cal->pdev = pdev;
dev->fclk = devm_clk_get(&pdev->dev, "fck"); cal->fclk = devm_clk_get(&pdev->dev, "fck");
if (IS_ERR(dev->fclk)) { if (IS_ERR(cal->fclk)) {
dev_err(&pdev->dev, "cannot get CAL fclk\n"); dev_err(&pdev->dev, "cannot get CAL fclk\n");
return PTR_ERR(dev->fclk); return PTR_ERR(cal->fclk);
} }
syscon_camerrx = syscon_regmap_lookup_by_phandle(parent, syscon_camerrx = syscon_regmap_lookup_by_phandle(parent,
...@@ -2279,7 +2283,7 @@ static int cal_probe(struct platform_device *pdev) ...@@ -2279,7 +2283,7 @@ static int cal_probe(struct platform_device *pdev)
* If syscon entry is not present then check if the * If syscon entry is not present then check if the
* camerrx_control resource is present. * camerrx_control resource is present.
*/ */
syscon_camerrx = cal_get_camerarx_regmap(dev); syscon_camerrx = cal_get_camerarx_regmap(cal);
if (IS_ERR(syscon_camerrx)) { if (IS_ERR(syscon_camerrx)) {
dev_err(&pdev->dev, "failed to get camerrx_control regmap\n"); dev_err(&pdev->dev, "failed to get camerrx_control regmap\n");
return PTR_ERR(syscon_camerrx); return PTR_ERR(syscon_camerrx);
...@@ -2290,47 +2294,47 @@ static int cal_probe(struct platform_device *pdev) ...@@ -2290,47 +2294,47 @@ static int cal_probe(struct platform_device *pdev)
syscon_camerrx_offset = 0; syscon_camerrx_offset = 0;
} }
dev->syscon_camerrx = syscon_camerrx; cal->syscon_camerrx = syscon_camerrx;
dev->syscon_camerrx_offset = syscon_camerrx_offset; cal->syscon_camerrx_offset = syscon_camerrx_offset;
dev->res = platform_get_resource_byname(pdev, IORESOURCE_MEM, cal->res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
"cal_top"); "cal_top");
dev->base = devm_ioremap_resource(&pdev->dev, dev->res); cal->base = devm_ioremap_resource(&pdev->dev, cal->res);
if (IS_ERR(dev->base)) if (IS_ERR(cal->base))
return PTR_ERR(dev->base); return PTR_ERR(cal->base);
cal_dbg(1, dev, "ioresource %s at %pa - %pa\n", cal_dbg(1, cal, "ioresource %s at %pa - %pa\n",
dev->res->name, &dev->res->start, &dev->res->end); cal->res->name, &cal->res->start, &cal->res->end);
irq = platform_get_irq(pdev, 0); irq = platform_get_irq(pdev, 0);
cal_dbg(1, dev, "got irq# %d\n", irq); cal_dbg(1, cal, "got irq# %d\n", irq);
ret = devm_request_irq(&pdev->dev, irq, cal_irq, 0, CAL_MODULE_NAME, ret = devm_request_irq(&pdev->dev, irq, cal_irq, 0, CAL_MODULE_NAME,
dev); cal);
if (ret) if (ret)
return ret; return ret;
platform_set_drvdata(pdev, dev); platform_set_drvdata(pdev, cal);
dev->cc[0] = cc_create(dev, 0); cal->cc[0] = cc_create(cal, 0);
if (IS_ERR(dev->cc[0])) if (IS_ERR(cal->cc[0]))
return PTR_ERR(dev->cc[0]); return PTR_ERR(cal->cc[0]);
if (cal_data_get_num_csi2_phy(dev) > 1) { if (cal_data_get_num_csi2_phy(cal) > 1) {
dev->cc[1] = cc_create(dev, 1); cal->cc[1] = cc_create(cal, 1);
if (IS_ERR(dev->cc[1])) if (IS_ERR(cal->cc[1]))
return PTR_ERR(dev->cc[1]); return PTR_ERR(cal->cc[1]);
} else { } else {
dev->cc[1] = NULL; cal->cc[1] = NULL;
} }
dev->ctx[0] = NULL; cal->ctx[0] = NULL;
dev->ctx[1] = NULL; cal->ctx[1] = NULL;
dev->ctx[0] = cal_create_instance(dev, 0); cal->ctx[0] = cal_create_instance(cal, 0);
if (cal_data_get_num_csi2_phy(dev) > 1) if (cal_data_get_num_csi2_phy(cal) > 1)
dev->ctx[1] = cal_create_instance(dev, 1); cal->ctx[1] = cal_create_instance(cal, 1);
if (!dev->ctx[0] && !dev->ctx[1]) { if (!cal->ctx[0] && !cal->ctx[1]) {
cal_err(dev, "Neither port is configured, no point in staying up\n"); cal_err(cal, "Neither port is configured, no point in staying up\n");
return -ENODEV; return -ENODEV;
} }
...@@ -2343,7 +2347,7 @@ static int cal_probe(struct platform_device *pdev) ...@@ -2343,7 +2347,7 @@ static int cal_probe(struct platform_device *pdev)
goto runtime_disable; goto runtime_disable;
/* Just check we can actually access the module */ /* Just check we can actually access the module */
cal_get_hwinfo(dev); cal_get_hwinfo(cal);
pm_runtime_put_sync(&pdev->dev); pm_runtime_put_sync(&pdev->dev);
...@@ -2354,7 +2358,7 @@ static int cal_probe(struct platform_device *pdev) ...@@ -2354,7 +2358,7 @@ static int cal_probe(struct platform_device *pdev)
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
for (i = 0; i < CAL_NUM_CONTEXT; i++) { for (i = 0; i < CAL_NUM_CONTEXT; i++) {
ctx = dev->ctx[i]; ctx = cal->ctx[i];
if (ctx) { if (ctx) {
v4l2_async_notifier_unregister(&ctx->notifier); v4l2_async_notifier_unregister(&ctx->notifier);
v4l2_async_notifier_cleanup(&ctx->notifier); v4l2_async_notifier_cleanup(&ctx->notifier);
...@@ -2368,16 +2372,16 @@ static int cal_probe(struct platform_device *pdev) ...@@ -2368,16 +2372,16 @@ static int cal_probe(struct platform_device *pdev)
static int cal_remove(struct platform_device *pdev) static int cal_remove(struct platform_device *pdev)
{ {
struct cal_dev *dev = platform_get_drvdata(pdev); struct cal_dev *cal = platform_get_drvdata(pdev);
struct cal_ctx *ctx; struct cal_ctx *ctx;
unsigned int i; unsigned int i;
cal_dbg(1, dev, "Removing %s\n", CAL_MODULE_NAME); cal_dbg(1, cal, "Removing %s\n", CAL_MODULE_NAME);
pm_runtime_get_sync(&pdev->dev); pm_runtime_get_sync(&pdev->dev);
for (i = 0; i < CAL_NUM_CONTEXT; i++) { for (i = 0; i < CAL_NUM_CONTEXT; i++) {
ctx = dev->ctx[i]; ctx = cal->ctx[i];
if (ctx) { if (ctx) {
ctx_dbg(1, ctx, "unregistering %s\n", ctx_dbg(1, ctx, "unregistering %s\n",
video_device_node_name(&ctx->vdev)); video_device_node_name(&ctx->vdev));
...@@ -2400,15 +2404,15 @@ static int cal_remove(struct platform_device *pdev) ...@@ -2400,15 +2404,15 @@ static int cal_remove(struct platform_device *pdev)
static int cal_runtime_resume(struct device *dev) static int cal_runtime_resume(struct device *dev)
{ {
struct cal_dev *caldev = dev_get_drvdata(dev); struct cal_dev *cal = dev_get_drvdata(dev);
if (caldev->data->flags & DRA72_CAL_PRE_ES2_LDO_DISABLE) { if (cal->data->flags & DRA72_CAL_PRE_ES2_LDO_DISABLE) {
/* /*
* Apply errata on both port everytime we (re-)enable * Apply errata on both port everytime we (re-)enable
* the clock * the clock
*/ */
i913_errata(caldev, 0); i913_errata(cal, 0);
i913_errata(caldev, 1); i913_errata(cal, 1);
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment