* [PATCH v2 0/7] rkisp1 support for px30
@ 2021-06-15 0:37 ` Heiko Stuebner
0 siblings, 0 replies; 38+ messages in thread
From: Heiko Stuebner @ 2021-06-15 0:37 UTC (permalink / raw)
To: mchehab, hverkuil-cisco
Cc: ezequiel, dafna.hirschfeld, helen.koike, Laurent.pinchart,
linux-rockchip, linux-media, heiko
This series adds support for the slightly different v12
variant of the ISP used for example in the px30 soc.
changes in v2 (from rfc):
- split out phy patch into a separate series
- drop dts patches for now
- split v12 addition and v10 prefixes into separate patches
to enable easier review (Dafna)
- remove {stats,params}_config structs, we can just use the
correct constant (Dafna)
- adapt to styling comments from Dafna and Helen
- add patch to remove the unused irq variable in struct rkisp
Heiko Stuebner (7):
media: rockchip: rkisp1: remove unused irq variable
media: rockchip: rkisp1: allow separate interrupts
media: rockchip: rkisp1: make some isp-param functions variable
media: rockchip: rkisp1: make some isp-stats functions variable
media: rockchip: rkisp1: add prefixes for v10 specific parts
media: rockchip: rkisp1: add support for v12 isp variants
media: rockchip: rkisp1: add support for px30 isp version
.../platform/rockchip/rkisp1/rkisp1-capture.c | 9 +-
.../platform/rockchip/rkisp1/rkisp1-common.h | 44 +-
.../platform/rockchip/rkisp1/rkisp1-dev.c | 77 ++-
.../platform/rockchip/rkisp1/rkisp1-isp.c | 29 +-
.../platform/rockchip/rkisp1/rkisp1-params.c | 554 ++++++++++++++----
.../platform/rockchip/rkisp1/rkisp1-regs.h | 406 ++++++++-----
.../platform/rockchip/rkisp1/rkisp1-stats.c | 107 +++-
7 files changed, 955 insertions(+), 271 deletions(-)
--
2.29.2
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v2 0/7] rkisp1 support for px30
@ 2021-06-15 0:37 ` Heiko Stuebner
0 siblings, 0 replies; 38+ messages in thread
From: Heiko Stuebner @ 2021-06-15 0:37 UTC (permalink / raw)
To: mchehab, hverkuil-cisco
Cc: ezequiel, dafna.hirschfeld, helen.koike, Laurent.pinchart,
linux-rockchip, linux-media, heiko
This series adds support for the slightly different v12
variant of the ISP used for example in the px30 soc.
changes in v2 (from rfc):
- split out phy patch into a separate series
- drop dts patches for now
- split v12 addition and v10 prefixes into separate patches
to enable easier review (Dafna)
- remove {stats,params}_config structs, we can just use the
correct constant (Dafna)
- adapt to styling comments from Dafna and Helen
- add patch to remove the unused irq variable in struct rkisp
Heiko Stuebner (7):
media: rockchip: rkisp1: remove unused irq variable
media: rockchip: rkisp1: allow separate interrupts
media: rockchip: rkisp1: make some isp-param functions variable
media: rockchip: rkisp1: make some isp-stats functions variable
media: rockchip: rkisp1: add prefixes for v10 specific parts
media: rockchip: rkisp1: add support for v12 isp variants
media: rockchip: rkisp1: add support for px30 isp version
.../platform/rockchip/rkisp1/rkisp1-capture.c | 9 +-
.../platform/rockchip/rkisp1/rkisp1-common.h | 44 +-
.../platform/rockchip/rkisp1/rkisp1-dev.c | 77 ++-
.../platform/rockchip/rkisp1/rkisp1-isp.c | 29 +-
.../platform/rockchip/rkisp1/rkisp1-params.c | 554 ++++++++++++++----
.../platform/rockchip/rkisp1/rkisp1-regs.h | 406 ++++++++-----
.../platform/rockchip/rkisp1/rkisp1-stats.c | 107 +++-
7 files changed, 955 insertions(+), 271 deletions(-)
--
2.29.2
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v2 1/7] media: rockchip: rkisp1: remove unused irq variable
2021-06-15 0:37 ` Heiko Stuebner
@ 2021-06-15 0:37 ` Heiko Stuebner
-1 siblings, 0 replies; 38+ messages in thread
From: Heiko Stuebner @ 2021-06-15 0:37 UTC (permalink / raw)
To: mchehab, hverkuil-cisco
Cc: ezequiel, dafna.hirschfeld, helen.koike, Laurent.pinchart,
linux-rockchip, linux-media, heiko, Heiko Stuebner
From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
The irq variable in struct rkisp1 is unused as it is only used
to request the irq during probe, so remove it.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
drivers/media/platform/rockchip/rkisp1/rkisp1-common.h | 1 -
drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c | 2 --
2 files changed, 3 deletions(-)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
index 038c303a8aed..be8a350c7527 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
@@ -352,7 +352,6 @@ struct rkisp1_debug {
*/
struct rkisp1_device {
void __iomem *base_addr;
- int irq;
struct device *dev;
unsigned int clk_size;
struct clk_bulk_data clks[RKISP1_MAX_BUS_CLK];
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
index 7474150b94ed..7afa4c123834 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
@@ -489,8 +489,6 @@ static int rkisp1_probe(struct platform_device *pdev)
return ret;
}
- rkisp1->irq = irq;
-
for (i = 0; i < match_data->size; i++)
rkisp1->clks[i].id = match_data->clks[i];
ret = devm_clk_bulk_get(dev, match_data->size, rkisp1->clks);
--
2.29.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v2 1/7] media: rockchip: rkisp1: remove unused irq variable
@ 2021-06-15 0:37 ` Heiko Stuebner
0 siblings, 0 replies; 38+ messages in thread
From: Heiko Stuebner @ 2021-06-15 0:37 UTC (permalink / raw)
To: mchehab, hverkuil-cisco
Cc: ezequiel, dafna.hirschfeld, helen.koike, Laurent.pinchart,
linux-rockchip, linux-media, heiko, Heiko Stuebner
From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
The irq variable in struct rkisp1 is unused as it is only used
to request the irq during probe, so remove it.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
drivers/media/platform/rockchip/rkisp1/rkisp1-common.h | 1 -
drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c | 2 --
2 files changed, 3 deletions(-)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
index 038c303a8aed..be8a350c7527 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
@@ -352,7 +352,6 @@ struct rkisp1_debug {
*/
struct rkisp1_device {
void __iomem *base_addr;
- int irq;
struct device *dev;
unsigned int clk_size;
struct clk_bulk_data clks[RKISP1_MAX_BUS_CLK];
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
index 7474150b94ed..7afa4c123834 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
@@ -489,8 +489,6 @@ static int rkisp1_probe(struct platform_device *pdev)
return ret;
}
- rkisp1->irq = irq;
-
for (i = 0; i < match_data->size; i++)
rkisp1->clks[i].id = match_data->clks[i];
ret = devm_clk_bulk_get(dev, match_data->size, rkisp1->clks);
--
2.29.2
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v2 2/7] media: rockchip: rkisp1: allow separate interrupts
2021-06-15 0:37 ` Heiko Stuebner
@ 2021-06-15 0:37 ` Heiko Stuebner
-1 siblings, 0 replies; 38+ messages in thread
From: Heiko Stuebner @ 2021-06-15 0:37 UTC (permalink / raw)
To: mchehab, hverkuil-cisco
Cc: ezequiel, dafna.hirschfeld, helen.koike, Laurent.pinchart,
linux-rockchip, linux-media, heiko, Heiko Stuebner
From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
Depending on the per-soc implementation there can be one interrupt
for isp, mipi and capture events or separate per-event interrupts.
So simply check for the presence of a named "mi" interrupt
to differentiate between the two cases.
Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
---
.../platform/rockchip/rkisp1/rkisp1-capture.c | 9 ++-
.../platform/rockchip/rkisp1/rkisp1-common.h | 7 ++-
.../platform/rockchip/rkisp1/rkisp1-dev.c | 58 ++++++++++++++-----
.../platform/rockchip/rkisp1/rkisp1-isp.c | 16 +++--
4 files changed, 69 insertions(+), 21 deletions(-)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
index 5f6c9d1623e4..f70c66c2a1d7 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
@@ -685,12 +685,17 @@ static void rkisp1_handle_buffer(struct rkisp1_capture *cap)
spin_unlock(&cap->buf.lock);
}
-void rkisp1_capture_isr(struct rkisp1_device *rkisp1)
+irqreturn_t rkisp1_capture_isr(int irq, void *ctx)
{
+ struct device *dev = ctx;
+ struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
unsigned int i;
u32 status;
status = rkisp1_read(rkisp1, RKISP1_CIF_MI_MIS);
+ if (!status)
+ return IRQ_NONE;
+
rkisp1_write(rkisp1, status, RKISP1_CIF_MI_ICR);
for (i = 0; i < ARRAY_SIZE(rkisp1->capture_devs); ++i) {
@@ -718,6 +723,8 @@ void rkisp1_capture_isr(struct rkisp1_device *rkisp1)
cap->is_streaming = false;
wake_up(&cap->done);
}
+
+ return IRQ_HANDLED;
}
/* ----------------------------------------------------------------------------
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
index be8a350c7527..25dd5c93620e 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
@@ -12,6 +12,7 @@
#define _RKISP1_COMMON_H
#include <linux/clk.h>
+#include <linux/interrupt.h>
#include <linux/mutex.h>
#include <linux/rkisp1-config.h>
#include <media/media-device.h>
@@ -459,9 +460,9 @@ void rkisp1_params_configure(struct rkisp1_params *params,
void rkisp1_params_disable(struct rkisp1_params *params);
/* irq handlers */
-void rkisp1_isp_isr(struct rkisp1_device *rkisp1);
-void rkisp1_mipi_isr(struct rkisp1_device *rkisp1);
-void rkisp1_capture_isr(struct rkisp1_device *rkisp1);
+irqreturn_t rkisp1_isp_isr(int irq, void *ctx);
+irqreturn_t rkisp1_mipi_isr(int irq, void *ctx);
+irqreturn_t rkisp1_capture_isr(int irq, void *ctx);
void rkisp1_stats_isr(struct rkisp1_stats *stats, u32 isp_ris);
void rkisp1_params_isr(struct rkisp1_device *rkisp1);
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
index 7afa4c123834..ddc05189c62a 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
@@ -385,18 +385,15 @@ static int rkisp1_entities_register(struct rkisp1_device *rkisp1)
static irqreturn_t rkisp1_isr(int irq, void *ctx)
{
- struct device *dev = ctx;
- struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
-
/*
* Call rkisp1_capture_isr() first to handle the frame that
* potentially completed using the current frame_sequence number before
* it is potentially incremented by rkisp1_isp_isr() in the vertical
* sync.
*/
- rkisp1_capture_isr(rkisp1);
- rkisp1_isp_isr(rkisp1);
- rkisp1_mipi_isr(rkisp1);
+ rkisp1_capture_isr(irq, ctx);
+ rkisp1_isp_isr(irq, ctx);
+ rkisp1_mipi_isr(irq, ctx);
return IRQ_HANDLED;
}
@@ -478,15 +475,50 @@ static int rkisp1_probe(struct platform_device *pdev)
if (IS_ERR(rkisp1->base_addr))
return PTR_ERR(rkisp1->base_addr);
- irq = platform_get_irq(pdev, 0);
- if (irq < 0)
+ irq = platform_get_irq_byname_optional(pdev, "mi");
+ if (irq == -EPROBE_DEFER) {
return irq;
+ } else if (irq < 0) {
+ irq = platform_get_irq(pdev, 0);
+ if (irq < 0)
+ return irq;
+
+ ret = devm_request_irq(dev, irq, rkisp1_isr, IRQF_SHARED,
+ dev_driver_string(dev), dev);
+ if (ret) {
+ dev_err(dev, "request irq failed: %d\n", ret);
+ return ret;
+ }
+ } else {
+ /* we test-got the MI (capture) interrupt */
+ ret = devm_request_irq(dev, irq, rkisp1_capture_isr, IRQF_SHARED,
+ dev_driver_string(dev), dev);
+ if (ret) {
+ dev_err(dev, "request mi irq failed: %d\n", ret);
+ return ret;
+ }
- ret = devm_request_irq(dev, irq, rkisp1_isr, IRQF_SHARED,
- dev_driver_string(dev), dev);
- if (ret) {
- dev_err(dev, "request irq failed: %d\n", ret);
- return ret;
+ irq = platform_get_irq_byname_optional(pdev, "mipi");
+ if (irq < 0)
+ return irq;
+
+ ret = devm_request_irq(dev, irq, rkisp1_mipi_isr, IRQF_SHARED,
+ dev_driver_string(dev), dev);
+ if (ret) {
+ dev_err(dev, "request mipi irq failed: %d\n", ret);
+ return ret;
+ }
+
+ irq = platform_get_irq_byname_optional(pdev, "isp");
+ if (irq < 0)
+ return irq;
+
+ ret = devm_request_irq(dev, irq, rkisp1_isp_isr, IRQF_SHARED,
+ dev_driver_string(dev), dev);
+ if (ret) {
+ dev_err(dev, "request isp irq failed: %d\n", ret);
+ return ret;
+ }
}
for (i = 0; i < match_data->size; i++)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
index 2e5b57e3aedc..1de98e688008 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
@@ -1090,13 +1090,15 @@ void rkisp1_isp_unregister(struct rkisp1_device *rkisp1)
* Interrupt handlers
*/
-void rkisp1_mipi_isr(struct rkisp1_device *rkisp1)
+irqreturn_t rkisp1_mipi_isr(int irq, void *ctx)
{
+ struct device *dev = ctx;
+ struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
u32 val, status;
status = rkisp1_read(rkisp1, RKISP1_CIF_MIPI_MIS);
if (!status)
- return;
+ return IRQ_NONE;
rkisp1_write(rkisp1, status, RKISP1_CIF_MIPI_ICR);
@@ -1131,6 +1133,8 @@ void rkisp1_mipi_isr(struct rkisp1_device *rkisp1)
} else {
rkisp1->debug.mipi_error++;
}
+
+ return IRQ_HANDLED;
}
static void rkisp1_isp_queue_event_sof(struct rkisp1_isp *isp)
@@ -1143,13 +1147,15 @@ static void rkisp1_isp_queue_event_sof(struct rkisp1_isp *isp)
v4l2_event_queue(isp->sd.devnode, &event);
}
-void rkisp1_isp_isr(struct rkisp1_device *rkisp1)
+irqreturn_t rkisp1_isp_isr(int irq, void *ctx)
{
+ struct device *dev = ctx;
+ struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
u32 status, isp_err;
status = rkisp1_read(rkisp1, RKISP1_CIF_ISP_MIS);
if (!status)
- return;
+ return IRQ_NONE;
rkisp1_write(rkisp1, status, RKISP1_CIF_ISP_ICR);
@@ -1191,4 +1197,6 @@ void rkisp1_isp_isr(struct rkisp1_device *rkisp1)
*/
rkisp1_params_isr(rkisp1);
}
+
+ return IRQ_HANDLED;
}
--
2.29.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v2 2/7] media: rockchip: rkisp1: allow separate interrupts
@ 2021-06-15 0:37 ` Heiko Stuebner
0 siblings, 0 replies; 38+ messages in thread
From: Heiko Stuebner @ 2021-06-15 0:37 UTC (permalink / raw)
To: mchehab, hverkuil-cisco
Cc: ezequiel, dafna.hirschfeld, helen.koike, Laurent.pinchart,
linux-rockchip, linux-media, heiko, Heiko Stuebner
From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
Depending on the per-soc implementation there can be one interrupt
for isp, mipi and capture events or separate per-event interrupts.
So simply check for the presence of a named "mi" interrupt
to differentiate between the two cases.
Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
---
.../platform/rockchip/rkisp1/rkisp1-capture.c | 9 ++-
.../platform/rockchip/rkisp1/rkisp1-common.h | 7 ++-
.../platform/rockchip/rkisp1/rkisp1-dev.c | 58 ++++++++++++++-----
.../platform/rockchip/rkisp1/rkisp1-isp.c | 16 +++--
4 files changed, 69 insertions(+), 21 deletions(-)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
index 5f6c9d1623e4..f70c66c2a1d7 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
@@ -685,12 +685,17 @@ static void rkisp1_handle_buffer(struct rkisp1_capture *cap)
spin_unlock(&cap->buf.lock);
}
-void rkisp1_capture_isr(struct rkisp1_device *rkisp1)
+irqreturn_t rkisp1_capture_isr(int irq, void *ctx)
{
+ struct device *dev = ctx;
+ struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
unsigned int i;
u32 status;
status = rkisp1_read(rkisp1, RKISP1_CIF_MI_MIS);
+ if (!status)
+ return IRQ_NONE;
+
rkisp1_write(rkisp1, status, RKISP1_CIF_MI_ICR);
for (i = 0; i < ARRAY_SIZE(rkisp1->capture_devs); ++i) {
@@ -718,6 +723,8 @@ void rkisp1_capture_isr(struct rkisp1_device *rkisp1)
cap->is_streaming = false;
wake_up(&cap->done);
}
+
+ return IRQ_HANDLED;
}
/* ----------------------------------------------------------------------------
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
index be8a350c7527..25dd5c93620e 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
@@ -12,6 +12,7 @@
#define _RKISP1_COMMON_H
#include <linux/clk.h>
+#include <linux/interrupt.h>
#include <linux/mutex.h>
#include <linux/rkisp1-config.h>
#include <media/media-device.h>
@@ -459,9 +460,9 @@ void rkisp1_params_configure(struct rkisp1_params *params,
void rkisp1_params_disable(struct rkisp1_params *params);
/* irq handlers */
-void rkisp1_isp_isr(struct rkisp1_device *rkisp1);
-void rkisp1_mipi_isr(struct rkisp1_device *rkisp1);
-void rkisp1_capture_isr(struct rkisp1_device *rkisp1);
+irqreturn_t rkisp1_isp_isr(int irq, void *ctx);
+irqreturn_t rkisp1_mipi_isr(int irq, void *ctx);
+irqreturn_t rkisp1_capture_isr(int irq, void *ctx);
void rkisp1_stats_isr(struct rkisp1_stats *stats, u32 isp_ris);
void rkisp1_params_isr(struct rkisp1_device *rkisp1);
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
index 7afa4c123834..ddc05189c62a 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
@@ -385,18 +385,15 @@ static int rkisp1_entities_register(struct rkisp1_device *rkisp1)
static irqreturn_t rkisp1_isr(int irq, void *ctx)
{
- struct device *dev = ctx;
- struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
-
/*
* Call rkisp1_capture_isr() first to handle the frame that
* potentially completed using the current frame_sequence number before
* it is potentially incremented by rkisp1_isp_isr() in the vertical
* sync.
*/
- rkisp1_capture_isr(rkisp1);
- rkisp1_isp_isr(rkisp1);
- rkisp1_mipi_isr(rkisp1);
+ rkisp1_capture_isr(irq, ctx);
+ rkisp1_isp_isr(irq, ctx);
+ rkisp1_mipi_isr(irq, ctx);
return IRQ_HANDLED;
}
@@ -478,15 +475,50 @@ static int rkisp1_probe(struct platform_device *pdev)
if (IS_ERR(rkisp1->base_addr))
return PTR_ERR(rkisp1->base_addr);
- irq = platform_get_irq(pdev, 0);
- if (irq < 0)
+ irq = platform_get_irq_byname_optional(pdev, "mi");
+ if (irq == -EPROBE_DEFER) {
return irq;
+ } else if (irq < 0) {
+ irq = platform_get_irq(pdev, 0);
+ if (irq < 0)
+ return irq;
+
+ ret = devm_request_irq(dev, irq, rkisp1_isr, IRQF_SHARED,
+ dev_driver_string(dev), dev);
+ if (ret) {
+ dev_err(dev, "request irq failed: %d\n", ret);
+ return ret;
+ }
+ } else {
+ /* we test-got the MI (capture) interrupt */
+ ret = devm_request_irq(dev, irq, rkisp1_capture_isr, IRQF_SHARED,
+ dev_driver_string(dev), dev);
+ if (ret) {
+ dev_err(dev, "request mi irq failed: %d\n", ret);
+ return ret;
+ }
- ret = devm_request_irq(dev, irq, rkisp1_isr, IRQF_SHARED,
- dev_driver_string(dev), dev);
- if (ret) {
- dev_err(dev, "request irq failed: %d\n", ret);
- return ret;
+ irq = platform_get_irq_byname_optional(pdev, "mipi");
+ if (irq < 0)
+ return irq;
+
+ ret = devm_request_irq(dev, irq, rkisp1_mipi_isr, IRQF_SHARED,
+ dev_driver_string(dev), dev);
+ if (ret) {
+ dev_err(dev, "request mipi irq failed: %d\n", ret);
+ return ret;
+ }
+
+ irq = platform_get_irq_byname_optional(pdev, "isp");
+ if (irq < 0)
+ return irq;
+
+ ret = devm_request_irq(dev, irq, rkisp1_isp_isr, IRQF_SHARED,
+ dev_driver_string(dev), dev);
+ if (ret) {
+ dev_err(dev, "request isp irq failed: %d\n", ret);
+ return ret;
+ }
}
for (i = 0; i < match_data->size; i++)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
index 2e5b57e3aedc..1de98e688008 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
@@ -1090,13 +1090,15 @@ void rkisp1_isp_unregister(struct rkisp1_device *rkisp1)
* Interrupt handlers
*/
-void rkisp1_mipi_isr(struct rkisp1_device *rkisp1)
+irqreturn_t rkisp1_mipi_isr(int irq, void *ctx)
{
+ struct device *dev = ctx;
+ struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
u32 val, status;
status = rkisp1_read(rkisp1, RKISP1_CIF_MIPI_MIS);
if (!status)
- return;
+ return IRQ_NONE;
rkisp1_write(rkisp1, status, RKISP1_CIF_MIPI_ICR);
@@ -1131,6 +1133,8 @@ void rkisp1_mipi_isr(struct rkisp1_device *rkisp1)
} else {
rkisp1->debug.mipi_error++;
}
+
+ return IRQ_HANDLED;
}
static void rkisp1_isp_queue_event_sof(struct rkisp1_isp *isp)
@@ -1143,13 +1147,15 @@ static void rkisp1_isp_queue_event_sof(struct rkisp1_isp *isp)
v4l2_event_queue(isp->sd.devnode, &event);
}
-void rkisp1_isp_isr(struct rkisp1_device *rkisp1)
+irqreturn_t rkisp1_isp_isr(int irq, void *ctx)
{
+ struct device *dev = ctx;
+ struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
u32 status, isp_err;
status = rkisp1_read(rkisp1, RKISP1_CIF_ISP_MIS);
if (!status)
- return;
+ return IRQ_NONE;
rkisp1_write(rkisp1, status, RKISP1_CIF_ISP_ICR);
@@ -1191,4 +1197,6 @@ void rkisp1_isp_isr(struct rkisp1_device *rkisp1)
*/
rkisp1_params_isr(rkisp1);
}
+
+ return IRQ_HANDLED;
}
--
2.29.2
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v2 3/7] media: rockchip: rkisp1: make some isp-param functions variable
2021-06-15 0:37 ` Heiko Stuebner
@ 2021-06-15 0:37 ` Heiko Stuebner
-1 siblings, 0 replies; 38+ messages in thread
From: Heiko Stuebner @ 2021-06-15 0:37 UTC (permalink / raw)
To: mchehab, hverkuil-cisco
Cc: ezequiel, dafna.hirschfeld, helen.koike, Laurent.pinchart,
linux-rockchip, linux-media, heiko, Heiko Stuebner
From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
The isp block evolved in subsequent socs, so some functions
will behave differently on newer variants.
Therefore make it possible to override the needed params functions.
Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
---
.../platform/rockchip/rkisp1/rkisp1-common.h | 25 ++++++++
.../platform/rockchip/rkisp1/rkisp1-params.c | 64 ++++++++++++-------
2 files changed, 65 insertions(+), 24 deletions(-)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
index 25dd5c93620e..74ddd8256366 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
@@ -254,11 +254,35 @@ struct rkisp1_stats {
struct v4l2_format vdev_fmt;
};
+struct rkisp1_params;
+struct rkisp1_params_ops {
+ void (*lsc_matrix_config)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_lsc_config *pconfig);
+ void (*goc_config)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_goc_config *arg);
+ void (*awb_meas_config)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_meas_config *arg);
+ void (*awb_meas_enable)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_meas_config *arg,
+ bool en);
+ void (*awb_gain_config)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_gain_config *arg);
+ void (*aec_config)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_aec_config *arg);
+ void (*hst_config)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_hst_config *arg);
+ void (*hst_enable)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_hst_config *arg, bool en);
+ void (*afm_config)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_afc_config *arg);
+};
+
/*
* struct rkisp1_params - ISP input parameters device
*
* @vnode: video node
* @rkisp1: pointer to the rkisp1 device
+ * @ops: pointer to the variant-specific operations
* @config_lock: locks the buffer list 'params'
* @params: queue of rkisp1_buffer
* @vdev_fmt: v4l2_format of the metadata format
@@ -268,6 +292,7 @@ struct rkisp1_stats {
struct rkisp1_params {
struct rkisp1_vdev_node vnode;
struct rkisp1_device *rkisp1;
+ struct rkisp1_params_ops *ops;
spinlock_t config_lock; /* locks the buffers list 'params' */
struct list_head params;
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
index b6beddd988d0..a971892ba81d 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
@@ -185,8 +185,8 @@ static void rkisp1_bls_config(struct rkisp1_params *params,
/* ISP LS correction interface function */
static void
-rkisp1_lsc_correct_matrix_config(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_lsc_config *pconfig)
+rkisp1_lsc_matrix_config(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_lsc_config *pconfig)
{
unsigned int isp_lsc_status, sram_addr, isp_lsc_table_sel, i, j, data;
@@ -265,7 +265,7 @@ static void rkisp1_lsc_config(struct rkisp1_params *params,
lsc_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_LSC_CTRL);
rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_LSC_CTRL,
RKISP1_CIF_ISP_LSC_CTRL_ENA);
- rkisp1_lsc_correct_matrix_config(params, arg);
+ params->ops->lsc_matrix_config(params, arg);
for (i = 0; i < RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE / 2; i++) {
/* program x size tables */
@@ -955,7 +955,7 @@ rkisp1_isp_isr_other_config(struct rkisp1_params *params,
/* update awb gains */
if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB_GAIN)
- rkisp1_awb_gain_config(params, &new_params->others.awb_gain_config);
+ params->ops->awb_gain_config(params, &new_params->others.awb_gain_config);
if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB_GAIN) {
if (module_ens & RKISP1_CIF_ISP_MODULE_AWB_GAIN)
@@ -1010,8 +1010,7 @@ rkisp1_isp_isr_other_config(struct rkisp1_params *params,
/* update goc config */
if (module_cfg_update & RKISP1_CIF_ISP_MODULE_GOC)
- rkisp1_goc_config(params,
- &new_params->others.goc_config);
+ params->ops->goc_config(params, &new_params->others.goc_config);
if (module_en_update & RKISP1_CIF_ISP_MODULE_GOC) {
if (module_ens & RKISP1_CIF_ISP_MODULE_GOC)
@@ -1081,17 +1080,17 @@ static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
/* update awb config */
if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB)
- rkisp1_awb_meas_config(params, &new_params->meas.awb_meas_config);
+ params->ops->awb_meas_config(params, &new_params->meas.awb_meas_config);
if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB)
- rkisp1_awb_meas_enable(params,
- &new_params->meas.awb_meas_config,
- !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
+ params->ops->awb_meas_enable(params,
+ &new_params->meas.awb_meas_config,
+ !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
/* update afc config */
if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AFC)
- rkisp1_afm_config(params,
- &new_params->meas.afc_config);
+ params->ops->afm_config(params,
+ &new_params->meas.afc_config);
if (module_en_update & RKISP1_CIF_ISP_MODULE_AFC) {
if (module_ens & RKISP1_CIF_ISP_MODULE_AFC)
@@ -1106,18 +1105,21 @@ static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
/* update hst config */
if (module_cfg_update & RKISP1_CIF_ISP_MODULE_HST)
- rkisp1_hst_config(params,
- &new_params->meas.hst_config);
+ params->ops->hst_config(params,
+ &new_params->meas.hst_config);
if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
+ params->ops->hst_enable(params,
+ &new_params->meas.hst_config,
+ !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
rkisp1_hst_enable(params,
&new_params->meas.hst_config,
!!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
/* update aec config */
if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AEC)
- rkisp1_aec_config(params,
- &new_params->meas.aec_config);
+ params->ops->aec_config(params,
+ &new_params->meas.aec_config);
if (module_en_update & RKISP1_CIF_ISP_MODULE_AEC) {
if (module_ens & RKISP1_CIF_ISP_MODULE_AEC)
@@ -1218,20 +1220,20 @@ static void rkisp1_params_config_parameter(struct rkisp1_params *params)
{
struct rkisp1_cif_isp_hst_config hst = rkisp1_hst_params_default_config;
- rkisp1_awb_meas_config(params, &rkisp1_awb_params_default_config);
- rkisp1_awb_meas_enable(params, &rkisp1_awb_params_default_config,
- true);
+ params->ops->awb_meas_config(params, &rkisp1_awb_params_default_config);
+ params->ops->awb_meas_enable(params, &rkisp1_awb_params_default_config,
+ true);
- rkisp1_aec_config(params, &rkisp1_aec_params_default_config);
+ params->ops->aec_config(params, &rkisp1_aec_params_default_config);
rkisp1_param_set_bits(params, RKISP1_CIF_ISP_EXP_CTRL,
RKISP1_CIF_ISP_EXP_ENA);
- rkisp1_afm_config(params, &rkisp1_afc_params_default_config);
+ params->ops->afm_config(params, &rkisp1_afc_params_default_config);
rkisp1_param_set_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
RKISP1_CIF_ISP_AFM_ENA);
memset(hst.hist_weight, 0x01, sizeof(hst.hist_weight));
- rkisp1_hst_config(params, &hst);
+ params->ops->hst_config(params, &hst);
rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP,
rkisp1_hst_params_default_config.mode);
@@ -1275,7 +1277,7 @@ void rkisp1_params_disable(struct rkisp1_params *params)
RKISP1_CIF_ISP_DEMOSAIC_BYPASS);
rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_FILT_MODE,
RKISP1_CIF_ISP_FLT_ENA);
- rkisp1_awb_meas_enable(params, NULL, false);
+ params->ops->awb_meas_enable(params, NULL, false);
rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_EXP_CTRL,
@@ -1283,7 +1285,7 @@ void rkisp1_params_disable(struct rkisp1_params *params)
rkisp1_ctk_enable(params, false);
rkisp1_param_clear_bits(params, RKISP1_CIF_C_PROC_CTRL,
RKISP1_CIF_C_PROC_CTR_ENABLE);
- rkisp1_hst_enable(params, NULL, false);
+ params->ops->hst_enable(params, NULL, false);
rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
RKISP1_CIF_ISP_AFM_ENA);
rkisp1_ie_enable(params, false);
@@ -1291,6 +1293,18 @@ void rkisp1_params_disable(struct rkisp1_params *params)
RKISP1_CIF_ISP_DPF_MODE_EN);
}
+static struct rkisp1_params_ops rkisp1_params_ops = {
+ .lsc_matrix_config = rkisp1_lsc_matrix_config,
+ .goc_config = rkisp1_goc_config,
+ .awb_meas_config = rkisp1_awb_meas_config,
+ .awb_meas_enable = rkisp1_awb_meas_enable,
+ .awb_gain_config = rkisp1_awb_gain_config,
+ .aec_config = rkisp1_aec_config,
+ .hst_config = rkisp1_hst_config,
+ .hst_enable = rkisp1_hst_enable,
+ .afm_config = rkisp1_afm_config,
+};
+
static int rkisp1_params_enum_fmt_meta_out(struct file *file, void *priv,
struct v4l2_fmtdesc *f)
{
@@ -1457,6 +1471,8 @@ static void rkisp1_init_params(struct rkisp1_params *params)
V4L2_META_FMT_RK_ISP1_PARAMS;
params->vdev_fmt.fmt.meta.buffersize =
sizeof(struct rkisp1_params_cfg);
+
+ params->ops = &rkisp1_params_ops;
}
int rkisp1_params_register(struct rkisp1_device *rkisp1)
--
2.29.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v2 3/7] media: rockchip: rkisp1: make some isp-param functions variable
@ 2021-06-15 0:37 ` Heiko Stuebner
0 siblings, 0 replies; 38+ messages in thread
From: Heiko Stuebner @ 2021-06-15 0:37 UTC (permalink / raw)
To: mchehab, hverkuil-cisco
Cc: ezequiel, dafna.hirschfeld, helen.koike, Laurent.pinchart,
linux-rockchip, linux-media, heiko, Heiko Stuebner
From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
The isp block evolved in subsequent socs, so some functions
will behave differently on newer variants.
Therefore make it possible to override the needed params functions.
Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
---
.../platform/rockchip/rkisp1/rkisp1-common.h | 25 ++++++++
.../platform/rockchip/rkisp1/rkisp1-params.c | 64 ++++++++++++-------
2 files changed, 65 insertions(+), 24 deletions(-)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
index 25dd5c93620e..74ddd8256366 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
@@ -254,11 +254,35 @@ struct rkisp1_stats {
struct v4l2_format vdev_fmt;
};
+struct rkisp1_params;
+struct rkisp1_params_ops {
+ void (*lsc_matrix_config)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_lsc_config *pconfig);
+ void (*goc_config)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_goc_config *arg);
+ void (*awb_meas_config)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_meas_config *arg);
+ void (*awb_meas_enable)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_meas_config *arg,
+ bool en);
+ void (*awb_gain_config)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_gain_config *arg);
+ void (*aec_config)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_aec_config *arg);
+ void (*hst_config)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_hst_config *arg);
+ void (*hst_enable)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_hst_config *arg, bool en);
+ void (*afm_config)(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_afc_config *arg);
+};
+
/*
* struct rkisp1_params - ISP input parameters device
*
* @vnode: video node
* @rkisp1: pointer to the rkisp1 device
+ * @ops: pointer to the variant-specific operations
* @config_lock: locks the buffer list 'params'
* @params: queue of rkisp1_buffer
* @vdev_fmt: v4l2_format of the metadata format
@@ -268,6 +292,7 @@ struct rkisp1_stats {
struct rkisp1_params {
struct rkisp1_vdev_node vnode;
struct rkisp1_device *rkisp1;
+ struct rkisp1_params_ops *ops;
spinlock_t config_lock; /* locks the buffers list 'params' */
struct list_head params;
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
index b6beddd988d0..a971892ba81d 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
@@ -185,8 +185,8 @@ static void rkisp1_bls_config(struct rkisp1_params *params,
/* ISP LS correction interface function */
static void
-rkisp1_lsc_correct_matrix_config(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_lsc_config *pconfig)
+rkisp1_lsc_matrix_config(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_lsc_config *pconfig)
{
unsigned int isp_lsc_status, sram_addr, isp_lsc_table_sel, i, j, data;
@@ -265,7 +265,7 @@ static void rkisp1_lsc_config(struct rkisp1_params *params,
lsc_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_LSC_CTRL);
rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_LSC_CTRL,
RKISP1_CIF_ISP_LSC_CTRL_ENA);
- rkisp1_lsc_correct_matrix_config(params, arg);
+ params->ops->lsc_matrix_config(params, arg);
for (i = 0; i < RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE / 2; i++) {
/* program x size tables */
@@ -955,7 +955,7 @@ rkisp1_isp_isr_other_config(struct rkisp1_params *params,
/* update awb gains */
if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB_GAIN)
- rkisp1_awb_gain_config(params, &new_params->others.awb_gain_config);
+ params->ops->awb_gain_config(params, &new_params->others.awb_gain_config);
if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB_GAIN) {
if (module_ens & RKISP1_CIF_ISP_MODULE_AWB_GAIN)
@@ -1010,8 +1010,7 @@ rkisp1_isp_isr_other_config(struct rkisp1_params *params,
/* update goc config */
if (module_cfg_update & RKISP1_CIF_ISP_MODULE_GOC)
- rkisp1_goc_config(params,
- &new_params->others.goc_config);
+ params->ops->goc_config(params, &new_params->others.goc_config);
if (module_en_update & RKISP1_CIF_ISP_MODULE_GOC) {
if (module_ens & RKISP1_CIF_ISP_MODULE_GOC)
@@ -1081,17 +1080,17 @@ static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
/* update awb config */
if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB)
- rkisp1_awb_meas_config(params, &new_params->meas.awb_meas_config);
+ params->ops->awb_meas_config(params, &new_params->meas.awb_meas_config);
if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB)
- rkisp1_awb_meas_enable(params,
- &new_params->meas.awb_meas_config,
- !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
+ params->ops->awb_meas_enable(params,
+ &new_params->meas.awb_meas_config,
+ !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
/* update afc config */
if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AFC)
- rkisp1_afm_config(params,
- &new_params->meas.afc_config);
+ params->ops->afm_config(params,
+ &new_params->meas.afc_config);
if (module_en_update & RKISP1_CIF_ISP_MODULE_AFC) {
if (module_ens & RKISP1_CIF_ISP_MODULE_AFC)
@@ -1106,18 +1105,21 @@ static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
/* update hst config */
if (module_cfg_update & RKISP1_CIF_ISP_MODULE_HST)
- rkisp1_hst_config(params,
- &new_params->meas.hst_config);
+ params->ops->hst_config(params,
+ &new_params->meas.hst_config);
if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
+ params->ops->hst_enable(params,
+ &new_params->meas.hst_config,
+ !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
rkisp1_hst_enable(params,
&new_params->meas.hst_config,
!!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
/* update aec config */
if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AEC)
- rkisp1_aec_config(params,
- &new_params->meas.aec_config);
+ params->ops->aec_config(params,
+ &new_params->meas.aec_config);
if (module_en_update & RKISP1_CIF_ISP_MODULE_AEC) {
if (module_ens & RKISP1_CIF_ISP_MODULE_AEC)
@@ -1218,20 +1220,20 @@ static void rkisp1_params_config_parameter(struct rkisp1_params *params)
{
struct rkisp1_cif_isp_hst_config hst = rkisp1_hst_params_default_config;
- rkisp1_awb_meas_config(params, &rkisp1_awb_params_default_config);
- rkisp1_awb_meas_enable(params, &rkisp1_awb_params_default_config,
- true);
+ params->ops->awb_meas_config(params, &rkisp1_awb_params_default_config);
+ params->ops->awb_meas_enable(params, &rkisp1_awb_params_default_config,
+ true);
- rkisp1_aec_config(params, &rkisp1_aec_params_default_config);
+ params->ops->aec_config(params, &rkisp1_aec_params_default_config);
rkisp1_param_set_bits(params, RKISP1_CIF_ISP_EXP_CTRL,
RKISP1_CIF_ISP_EXP_ENA);
- rkisp1_afm_config(params, &rkisp1_afc_params_default_config);
+ params->ops->afm_config(params, &rkisp1_afc_params_default_config);
rkisp1_param_set_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
RKISP1_CIF_ISP_AFM_ENA);
memset(hst.hist_weight, 0x01, sizeof(hst.hist_weight));
- rkisp1_hst_config(params, &hst);
+ params->ops->hst_config(params, &hst);
rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP,
rkisp1_hst_params_default_config.mode);
@@ -1275,7 +1277,7 @@ void rkisp1_params_disable(struct rkisp1_params *params)
RKISP1_CIF_ISP_DEMOSAIC_BYPASS);
rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_FILT_MODE,
RKISP1_CIF_ISP_FLT_ENA);
- rkisp1_awb_meas_enable(params, NULL, false);
+ params->ops->awb_meas_enable(params, NULL, false);
rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_EXP_CTRL,
@@ -1283,7 +1285,7 @@ void rkisp1_params_disable(struct rkisp1_params *params)
rkisp1_ctk_enable(params, false);
rkisp1_param_clear_bits(params, RKISP1_CIF_C_PROC_CTRL,
RKISP1_CIF_C_PROC_CTR_ENABLE);
- rkisp1_hst_enable(params, NULL, false);
+ params->ops->hst_enable(params, NULL, false);
rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
RKISP1_CIF_ISP_AFM_ENA);
rkisp1_ie_enable(params, false);
@@ -1291,6 +1293,18 @@ void rkisp1_params_disable(struct rkisp1_params *params)
RKISP1_CIF_ISP_DPF_MODE_EN);
}
+static struct rkisp1_params_ops rkisp1_params_ops = {
+ .lsc_matrix_config = rkisp1_lsc_matrix_config,
+ .goc_config = rkisp1_goc_config,
+ .awb_meas_config = rkisp1_awb_meas_config,
+ .awb_meas_enable = rkisp1_awb_meas_enable,
+ .awb_gain_config = rkisp1_awb_gain_config,
+ .aec_config = rkisp1_aec_config,
+ .hst_config = rkisp1_hst_config,
+ .hst_enable = rkisp1_hst_enable,
+ .afm_config = rkisp1_afm_config,
+};
+
static int rkisp1_params_enum_fmt_meta_out(struct file *file, void *priv,
struct v4l2_fmtdesc *f)
{
@@ -1457,6 +1471,8 @@ static void rkisp1_init_params(struct rkisp1_params *params)
V4L2_META_FMT_RK_ISP1_PARAMS;
params->vdev_fmt.fmt.meta.buffersize =
sizeof(struct rkisp1_params_cfg);
+
+ params->ops = &rkisp1_params_ops;
}
int rkisp1_params_register(struct rkisp1_device *rkisp1)
--
2.29.2
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v2 4/7] media: rockchip: rkisp1: make some isp-stats functions variable
2021-06-15 0:37 ` Heiko Stuebner
@ 2021-06-15 0:37 ` Heiko Stuebner
-1 siblings, 0 replies; 38+ messages in thread
From: Heiko Stuebner @ 2021-06-15 0:37 UTC (permalink / raw)
To: mchehab, hverkuil-cisco
Cc: ezequiel, dafna.hirschfeld, helen.koike, Laurent.pinchart,
linux-rockchip, linux-media, heiko, Heiko Stuebner
From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
The isp block evolved in subsequent socs, so some functions
will behave differently on newer variants.
Therefore make it possible to override the needed stats functions.
Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
---
.../media/platform/rockchip/rkisp1/rkisp1-common.h | 11 +++++++++++
.../media/platform/rockchip/rkisp1/rkisp1-stats.c | 14 +++++++++++---
2 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
index 74ddd8256366..d7f93547fab6 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
@@ -236,6 +236,16 @@ struct rkisp1_capture {
} pix;
};
+struct rkisp1_stats;
+struct rkisp1_stats_ops {
+ void (*get_awb_meas)(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf);
+ void (*get_aec_meas)(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf);
+ void (*get_hst_meas)(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf);
+};
+
/*
* struct rkisp1_stats - ISP Statistics device
*
@@ -248,6 +258,7 @@ struct rkisp1_capture {
struct rkisp1_stats {
struct rkisp1_vdev_node vnode;
struct rkisp1_device *rkisp1;
+ struct rkisp1_stats_ops *ops;
spinlock_t lock; /* locks the buffers list 'stats' */
struct list_head stat;
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
index c1d07a2e8839..f68a5e78e54a 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
@@ -287,6 +287,12 @@ static void rkisp1_stats_get_bls_meas(struct rkisp1_stats *stats,
}
}
+static struct rkisp1_stats_ops rkisp1_stats_ops = {
+ .get_awb_meas = rkisp1_stats_get_awb_meas,
+ .get_aec_meas = rkisp1_stats_get_aec_meas,
+ .get_hst_meas = rkisp1_stats_get_hst_meas,
+};
+
static void
rkisp1_stats_send_measurement(struct rkisp1_stats *stats, u32 isp_ris)
{
@@ -309,18 +315,18 @@ rkisp1_stats_send_measurement(struct rkisp1_stats *stats, u32 isp_ris)
(struct rkisp1_stat_buffer *)(cur_buf->vaddr);
if (isp_ris & RKISP1_CIF_ISP_AWB_DONE)
- rkisp1_stats_get_awb_meas(stats, cur_stat_buf);
+ stats->ops->get_awb_meas(stats, cur_stat_buf);
if (isp_ris & RKISP1_CIF_ISP_AFM_FIN)
rkisp1_stats_get_afc_meas(stats, cur_stat_buf);
if (isp_ris & RKISP1_CIF_ISP_EXP_END) {
- rkisp1_stats_get_aec_meas(stats, cur_stat_buf);
+ stats->ops->get_aec_meas(stats, cur_stat_buf);
rkisp1_stats_get_bls_meas(stats, cur_stat_buf);
}
if (isp_ris & RKISP1_CIF_ISP_HIST_MEASURE_RDY)
- rkisp1_stats_get_hst_meas(stats, cur_stat_buf);
+ stats->ops->get_hst_meas(stats, cur_stat_buf);
vb2_set_plane_payload(&cur_buf->vb.vb2_buf, 0,
sizeof(struct rkisp1_stat_buffer));
@@ -354,6 +360,8 @@ static void rkisp1_init_stats(struct rkisp1_stats *stats)
V4L2_META_FMT_RK_ISP1_STAT_3A;
stats->vdev_fmt.fmt.meta.buffersize =
sizeof(struct rkisp1_stat_buffer);
+
+ stats->ops = &rkisp1_stats_ops;
}
int rkisp1_stats_register(struct rkisp1_device *rkisp1)
--
2.29.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v2 4/7] media: rockchip: rkisp1: make some isp-stats functions variable
@ 2021-06-15 0:37 ` Heiko Stuebner
0 siblings, 0 replies; 38+ messages in thread
From: Heiko Stuebner @ 2021-06-15 0:37 UTC (permalink / raw)
To: mchehab, hverkuil-cisco
Cc: ezequiel, dafna.hirschfeld, helen.koike, Laurent.pinchart,
linux-rockchip, linux-media, heiko, Heiko Stuebner
From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
The isp block evolved in subsequent socs, so some functions
will behave differently on newer variants.
Therefore make it possible to override the needed stats functions.
Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
---
.../media/platform/rockchip/rkisp1/rkisp1-common.h | 11 +++++++++++
.../media/platform/rockchip/rkisp1/rkisp1-stats.c | 14 +++++++++++---
2 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
index 74ddd8256366..d7f93547fab6 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
@@ -236,6 +236,16 @@ struct rkisp1_capture {
} pix;
};
+struct rkisp1_stats;
+struct rkisp1_stats_ops {
+ void (*get_awb_meas)(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf);
+ void (*get_aec_meas)(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf);
+ void (*get_hst_meas)(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf);
+};
+
/*
* struct rkisp1_stats - ISP Statistics device
*
@@ -248,6 +258,7 @@ struct rkisp1_capture {
struct rkisp1_stats {
struct rkisp1_vdev_node vnode;
struct rkisp1_device *rkisp1;
+ struct rkisp1_stats_ops *ops;
spinlock_t lock; /* locks the buffers list 'stats' */
struct list_head stat;
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
index c1d07a2e8839..f68a5e78e54a 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
@@ -287,6 +287,12 @@ static void rkisp1_stats_get_bls_meas(struct rkisp1_stats *stats,
}
}
+static struct rkisp1_stats_ops rkisp1_stats_ops = {
+ .get_awb_meas = rkisp1_stats_get_awb_meas,
+ .get_aec_meas = rkisp1_stats_get_aec_meas,
+ .get_hst_meas = rkisp1_stats_get_hst_meas,
+};
+
static void
rkisp1_stats_send_measurement(struct rkisp1_stats *stats, u32 isp_ris)
{
@@ -309,18 +315,18 @@ rkisp1_stats_send_measurement(struct rkisp1_stats *stats, u32 isp_ris)
(struct rkisp1_stat_buffer *)(cur_buf->vaddr);
if (isp_ris & RKISP1_CIF_ISP_AWB_DONE)
- rkisp1_stats_get_awb_meas(stats, cur_stat_buf);
+ stats->ops->get_awb_meas(stats, cur_stat_buf);
if (isp_ris & RKISP1_CIF_ISP_AFM_FIN)
rkisp1_stats_get_afc_meas(stats, cur_stat_buf);
if (isp_ris & RKISP1_CIF_ISP_EXP_END) {
- rkisp1_stats_get_aec_meas(stats, cur_stat_buf);
+ stats->ops->get_aec_meas(stats, cur_stat_buf);
rkisp1_stats_get_bls_meas(stats, cur_stat_buf);
}
if (isp_ris & RKISP1_CIF_ISP_HIST_MEASURE_RDY)
- rkisp1_stats_get_hst_meas(stats, cur_stat_buf);
+ stats->ops->get_hst_meas(stats, cur_stat_buf);
vb2_set_plane_payload(&cur_buf->vb.vb2_buf, 0,
sizeof(struct rkisp1_stat_buffer));
@@ -354,6 +360,8 @@ static void rkisp1_init_stats(struct rkisp1_stats *stats)
V4L2_META_FMT_RK_ISP1_STAT_3A;
stats->vdev_fmt.fmt.meta.buffersize =
sizeof(struct rkisp1_stat_buffer);
+
+ stats->ops = &rkisp1_stats_ops;
}
int rkisp1_stats_register(struct rkisp1_device *rkisp1)
--
2.29.2
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v2 5/7] media: rockchip: rkisp1: add prefixes for v10 specific parts
2021-06-15 0:37 ` Heiko Stuebner
@ 2021-06-15 0:37 ` Heiko Stuebner
-1 siblings, 0 replies; 38+ messages in thread
From: Heiko Stuebner @ 2021-06-15 0:37 UTC (permalink / raw)
To: mchehab, hverkuil-cisco
Cc: ezequiel, dafna.hirschfeld, helen.koike, Laurent.pinchart,
linux-rockchip, linux-media, heiko, Heiko Stuebner
From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
The rkisp1 evolved over soc generations and the rk3326/px30 introduced
the so called v12 - probably meaning v1.2.
In a first step adapt the affected v10 parts to give them a
matching suffix to enable us to add v12 variants later on.
Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
---
.../platform/rockchip/rkisp1/rkisp1-params.c | 180 +++++------
.../platform/rockchip/rkisp1/rkisp1-regs.h | 295 ++++++++++--------
.../platform/rockchip/rkisp1/rkisp1-stats.c | 32 +-
3 files changed, 269 insertions(+), 238 deletions(-)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
index a971892ba81d..427c7cc400b2 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
@@ -185,8 +185,8 @@ static void rkisp1_bls_config(struct rkisp1_params *params,
/* ISP LS correction interface function */
static void
-rkisp1_lsc_matrix_config(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_lsc_config *pconfig)
+rkisp1_lsc_matrix_config_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_lsc_config *pconfig)
{
unsigned int isp_lsc_status, sram_addr, isp_lsc_table_sel, i, j, data;
@@ -212,39 +212,39 @@ rkisp1_lsc_matrix_config(struct rkisp1_params *params,
* DWORDs (2nd value of last DWORD unused)
*/
for (j = 0; j < RKISP1_CIF_ISP_LSC_SAMPLES_MAX - 1; j += 2) {
- data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->r_data_tbl[i][j],
- pconfig->r_data_tbl[i][j + 1]);
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->r_data_tbl[i][j],
+ pconfig->r_data_tbl[i][j + 1]);
rkisp1_write(params->rkisp1, data,
RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
- data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->gr_data_tbl[i][j],
- pconfig->gr_data_tbl[i][j + 1]);
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->gr_data_tbl[i][j],
+ pconfig->gr_data_tbl[i][j + 1]);
rkisp1_write(params->rkisp1, data,
RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
- data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->gb_data_tbl[i][j],
- pconfig->gb_data_tbl[i][j + 1]);
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->gb_data_tbl[i][j],
+ pconfig->gb_data_tbl[i][j + 1]);
rkisp1_write(params->rkisp1, data,
RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
- data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->b_data_tbl[i][j],
- pconfig->b_data_tbl[i][j + 1]);
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->b_data_tbl[i][j],
+ pconfig->b_data_tbl[i][j + 1]);
rkisp1_write(params->rkisp1, data,
RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
}
- data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->r_data_tbl[i][j], 0);
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->r_data_tbl[i][j], 0);
rkisp1_write(params->rkisp1, data,
RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
- data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->gr_data_tbl[i][j], 0);
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->gr_data_tbl[i][j], 0);
rkisp1_write(params->rkisp1, data,
RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
- data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->gb_data_tbl[i][j], 0);
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->gb_data_tbl[i][j], 0);
rkisp1_write(params->rkisp1, data,
RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
- data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->b_data_tbl[i][j], 0);
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->b_data_tbl[i][j], 0);
rkisp1_write(params->rkisp1, data,
RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
}
@@ -382,18 +382,18 @@ static void rkisp1_sdg_config(struct rkisp1_params *params,
}
/* ISP GAMMA correction interface function */
-static void rkisp1_goc_config(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_goc_config *arg)
+static void rkisp1_goc_config_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_goc_config *arg)
{
unsigned int i;
rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
RKISP1_CIF_ISP_CTRL_ISP_GAMMA_OUT_ENA);
- rkisp1_write(params->rkisp1, arg->mode, RKISP1_CIF_ISP_GAMMA_OUT_MODE);
+ rkisp1_write(params->rkisp1, arg->mode, RKISP1_CIF_ISP_GAMMA_OUT_MODE_V10);
for (i = 0; i < RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10; i++)
rkisp1_write(params->rkisp1, arg->gamma_y[i],
- RKISP1_CIF_ISP_GAMMA_OUT_Y_0 + i * 4);
+ RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V10 + i * 4);
}
/* ISP Cross Talk */
@@ -433,8 +433,8 @@ static void rkisp1_ctk_enable(struct rkisp1_params *params, bool en)
}
/* ISP White Balance Mode */
-static void rkisp1_awb_meas_config(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_awb_meas_config *arg)
+static void rkisp1_awb_meas_config_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_meas_config *arg)
{
u32 reg_val = 0;
/* based on the mode,configure the awb module */
@@ -442,43 +442,43 @@ static void rkisp1_awb_meas_config(struct rkisp1_params *params,
/* Reference Cb and Cr */
rkisp1_write(params->rkisp1,
RKISP1_CIF_ISP_AWB_REF_CR_SET(arg->awb_ref_cr) |
- arg->awb_ref_cb, RKISP1_CIF_ISP_AWB_REF);
+ arg->awb_ref_cb, RKISP1_CIF_ISP_AWB_REF_V10);
/* Yc Threshold */
rkisp1_write(params->rkisp1,
RKISP1_CIF_ISP_AWB_MAX_Y_SET(arg->max_y) |
RKISP1_CIF_ISP_AWB_MIN_Y_SET(arg->min_y) |
RKISP1_CIF_ISP_AWB_MAX_CS_SET(arg->max_csum) |
- arg->min_c, RKISP1_CIF_ISP_AWB_THRESH);
+ arg->min_c, RKISP1_CIF_ISP_AWB_THRESH_V10);
}
- reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP);
+ reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V10);
if (arg->enable_ymax_cmp)
reg_val |= RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
else
reg_val &= ~RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
- rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP);
+ rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V10);
/* window offset */
rkisp1_write(params->rkisp1,
- arg->awb_wnd.v_offs, RKISP1_CIF_ISP_AWB_WND_V_OFFS);
+ arg->awb_wnd.v_offs, RKISP1_CIF_ISP_AWB_WND_V_OFFS_V10);
rkisp1_write(params->rkisp1,
- arg->awb_wnd.h_offs, RKISP1_CIF_ISP_AWB_WND_H_OFFS);
+ arg->awb_wnd.h_offs, RKISP1_CIF_ISP_AWB_WND_H_OFFS_V10);
/* AWB window size */
rkisp1_write(params->rkisp1,
- arg->awb_wnd.v_size, RKISP1_CIF_ISP_AWB_WND_V_SIZE);
+ arg->awb_wnd.v_size, RKISP1_CIF_ISP_AWB_WND_V_SIZE_V10);
rkisp1_write(params->rkisp1,
- arg->awb_wnd.h_size, RKISP1_CIF_ISP_AWB_WND_H_SIZE);
+ arg->awb_wnd.h_size, RKISP1_CIF_ISP_AWB_WND_H_SIZE_V10);
/* Number of frames */
rkisp1_write(params->rkisp1,
- arg->frames, RKISP1_CIF_ISP_AWB_FRAMES);
+ arg->frames, RKISP1_CIF_ISP_AWB_FRAMES_V10);
}
static void
-rkisp1_awb_meas_enable(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_awb_meas_config *arg,
- bool en)
+rkisp1_awb_meas_enable_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_meas_config *arg,
+ bool en)
{
- u32 reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP);
+ u32 reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V10);
/* switch off */
reg_val &= RKISP1_CIF_ISP_AWB_MODE_MASK_NONE;
@@ -489,34 +489,34 @@ rkisp1_awb_meas_enable(struct rkisp1_params *params,
else
reg_val |= RKISP1_CIF_ISP_AWB_MODE_YCBCR_EN;
- rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP);
+ rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V10);
/* Measurements require AWB block be active. */
rkisp1_param_set_bits(params, RKISP1_CIF_ISP_CTRL,
RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
} else {
rkisp1_write(params->rkisp1,
- reg_val, RKISP1_CIF_ISP_AWB_PROP);
+ reg_val, RKISP1_CIF_ISP_AWB_PROP_V10);
rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
}
}
static void
-rkisp1_awb_gain_config(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_awb_gain_config *arg)
+rkisp1_awb_gain_config_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_gain_config *arg)
{
rkisp1_write(params->rkisp1,
RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_green_r) |
- arg->gain_green_b, RKISP1_CIF_ISP_AWB_GAIN_G);
+ arg->gain_green_b, RKISP1_CIF_ISP_AWB_GAIN_G_V10);
rkisp1_write(params->rkisp1,
RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_red) |
- arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB);
+ arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB_V10);
}
-static void rkisp1_aec_config(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_aec_config *arg)
+static void rkisp1_aec_config_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_aec_config *arg)
{
unsigned int block_hsize, block_vsize;
u32 exp_ctrl;
@@ -531,21 +531,21 @@ static void rkisp1_aec_config(struct rkisp1_params *params,
rkisp1_write(params->rkisp1, exp_ctrl, RKISP1_CIF_ISP_EXP_CTRL);
rkisp1_write(params->rkisp1,
- arg->meas_window.h_offs, RKISP1_CIF_ISP_EXP_H_OFFSET);
+ arg->meas_window.h_offs, RKISP1_CIF_ISP_EXP_H_OFFSET_V10);
rkisp1_write(params->rkisp1,
- arg->meas_window.v_offs, RKISP1_CIF_ISP_EXP_V_OFFSET);
+ arg->meas_window.v_offs, RKISP1_CIF_ISP_EXP_V_OFFSET_V10);
block_hsize = arg->meas_window.h_size /
- RKISP1_CIF_ISP_EXP_COLUMN_NUM - 1;
+ RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 - 1;
block_vsize = arg->meas_window.v_size /
- RKISP1_CIF_ISP_EXP_ROW_NUM - 1;
+ RKISP1_CIF_ISP_EXP_ROW_NUM_V10 - 1;
rkisp1_write(params->rkisp1,
- RKISP1_CIF_ISP_EXP_H_SIZE_SET(block_hsize),
- RKISP1_CIF_ISP_EXP_H_SIZE);
+ RKISP1_CIF_ISP_EXP_H_SIZE_SET_V10(block_hsize),
+ RKISP1_CIF_ISP_EXP_H_SIZE_V10);
rkisp1_write(params->rkisp1,
- RKISP1_CIF_ISP_EXP_V_SIZE_SET(block_vsize),
- RKISP1_CIF_ISP_EXP_V_SIZE);
+ RKISP1_CIF_ISP_EXP_V_SIZE_SET_V10(block_vsize),
+ RKISP1_CIF_ISP_EXP_V_SIZE_V10);
}
static void rkisp1_cproc_config(struct rkisp1_params *params,
@@ -578,73 +578,73 @@ static void rkisp1_cproc_config(struct rkisp1_params *params,
}
}
-static void rkisp1_hst_config(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_hst_config *arg)
+static void rkisp1_hst_config_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_hst_config *arg)
{
unsigned int block_hsize, block_vsize;
static const u32 hist_weight_regs[] = {
- RKISP1_CIF_ISP_HIST_WEIGHT_00TO30,
- RKISP1_CIF_ISP_HIST_WEIGHT_40TO21,
- RKISP1_CIF_ISP_HIST_WEIGHT_31TO12,
- RKISP1_CIF_ISP_HIST_WEIGHT_22TO03,
- RKISP1_CIF_ISP_HIST_WEIGHT_13TO43,
- RKISP1_CIF_ISP_HIST_WEIGHT_04TO34,
+ RKISP1_CIF_ISP_HIST_WEIGHT_00TO30_V10,
+ RKISP1_CIF_ISP_HIST_WEIGHT_40TO21_V10,
+ RKISP1_CIF_ISP_HIST_WEIGHT_31TO12_V10,
+ RKISP1_CIF_ISP_HIST_WEIGHT_22TO03_V10,
+ RKISP1_CIF_ISP_HIST_WEIGHT_13TO43_V10,
+ RKISP1_CIF_ISP_HIST_WEIGHT_04TO34_V10,
};
const u8 *weight;
unsigned int i;
u32 hist_prop;
/* avoid to override the old enable value */
- hist_prop = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_HIST_PROP);
- hist_prop &= RKISP1_CIF_ISP_HIST_PROP_MODE_MASK;
- hist_prop |= RKISP1_CIF_ISP_HIST_PREDIV_SET(arg->histogram_predivider);
- rkisp1_write(params->rkisp1, hist_prop, RKISP1_CIF_ISP_HIST_PROP);
+ hist_prop = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_HIST_PROP_V10);
+ hist_prop &= RKISP1_CIF_ISP_HIST_PROP_MODE_MASK_V10;
+ hist_prop |= RKISP1_CIF_ISP_HIST_PREDIV_SET_V10(arg->histogram_predivider);
+ rkisp1_write(params->rkisp1, hist_prop, RKISP1_CIF_ISP_HIST_PROP_V10);
rkisp1_write(params->rkisp1,
arg->meas_window.h_offs,
- RKISP1_CIF_ISP_HIST_H_OFFS);
+ RKISP1_CIF_ISP_HIST_H_OFFS_V10);
rkisp1_write(params->rkisp1,
arg->meas_window.v_offs,
- RKISP1_CIF_ISP_HIST_V_OFFS);
+ RKISP1_CIF_ISP_HIST_V_OFFS_V10);
block_hsize = arg->meas_window.h_size /
- RKISP1_CIF_ISP_HIST_COLUMN_NUM - 1;
- block_vsize = arg->meas_window.v_size / RKISP1_CIF_ISP_HIST_ROW_NUM - 1;
+ RKISP1_CIF_ISP_HIST_COLUMN_NUM_V10 - 1;
+ block_vsize = arg->meas_window.v_size / RKISP1_CIF_ISP_HIST_ROW_NUM_V10 - 1;
- rkisp1_write(params->rkisp1, block_hsize, RKISP1_CIF_ISP_HIST_H_SIZE);
- rkisp1_write(params->rkisp1, block_vsize, RKISP1_CIF_ISP_HIST_V_SIZE);
+ rkisp1_write(params->rkisp1, block_hsize, RKISP1_CIF_ISP_HIST_H_SIZE_V10);
+ rkisp1_write(params->rkisp1, block_vsize, RKISP1_CIF_ISP_HIST_V_SIZE_V10);
weight = arg->hist_weight;
for (i = 0; i < ARRAY_SIZE(hist_weight_regs); ++i, weight += 4)
rkisp1_write(params->rkisp1,
- RKISP1_CIF_ISP_HIST_WEIGHT_SET(weight[0],
+ RKISP1_CIF_ISP_HIST_WEIGHT_SET_V10(weight[0],
weight[1],
weight[2],
weight[3]),
hist_weight_regs[i]);
- rkisp1_write(params->rkisp1, weight[0] & 0x1F, RKISP1_CIF_ISP_HIST_WEIGHT_44);
+ rkisp1_write(params->rkisp1, weight[0] & 0x1F, RKISP1_CIF_ISP_HIST_WEIGHT_44_V10);
}
static void
-rkisp1_hst_enable(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_hst_config *arg, bool en)
+rkisp1_hst_enable_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_hst_config *arg, bool en)
{
if (en) {
u32 hist_prop = rkisp1_read(params->rkisp1,
- RKISP1_CIF_ISP_HIST_PROP);
+ RKISP1_CIF_ISP_HIST_PROP_V10);
- hist_prop &= ~RKISP1_CIF_ISP_HIST_PROP_MODE_MASK;
+ hist_prop &= ~RKISP1_CIF_ISP_HIST_PROP_MODE_MASK_V10;
hist_prop |= arg->mode;
- rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP,
+ rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP_V10,
hist_prop);
} else {
- rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_HIST_PROP,
- RKISP1_CIF_ISP_HIST_PROP_MODE_MASK);
+ rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_HIST_PROP_V10,
+ RKISP1_CIF_ISP_HIST_PROP_MODE_MASK_V10);
}
}
-static void rkisp1_afm_config(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_afc_config *arg)
+static void rkisp1_afm_config_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_afc_config *arg)
{
size_t num_of_win = min_t(size_t, ARRAY_SIZE(arg->afm_win),
arg->num_afm_win);
@@ -1234,7 +1234,7 @@ static void rkisp1_params_config_parameter(struct rkisp1_params *params)
memset(hst.hist_weight, 0x01, sizeof(hst.hist_weight));
params->ops->hst_config(params, &hst);
- rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP,
+ rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP_V10,
rkisp1_hst_params_default_config.mode);
/* set the range */
@@ -1293,16 +1293,16 @@ void rkisp1_params_disable(struct rkisp1_params *params)
RKISP1_CIF_ISP_DPF_MODE_EN);
}
-static struct rkisp1_params_ops rkisp1_params_ops = {
- .lsc_matrix_config = rkisp1_lsc_matrix_config,
- .goc_config = rkisp1_goc_config,
- .awb_meas_config = rkisp1_awb_meas_config,
- .awb_meas_enable = rkisp1_awb_meas_enable,
- .awb_gain_config = rkisp1_awb_gain_config,
- .aec_config = rkisp1_aec_config,
- .hst_config = rkisp1_hst_config,
- .hst_enable = rkisp1_hst_enable,
- .afm_config = rkisp1_afm_config,
+static struct rkisp1_params_ops rkisp1_v10_params_ops = {
+ .lsc_matrix_config = rkisp1_lsc_matrix_config_v10,
+ .goc_config = rkisp1_goc_config_v10,
+ .awb_meas_config = rkisp1_awb_meas_config_v10,
+ .awb_meas_enable = rkisp1_awb_meas_enable_v10,
+ .awb_gain_config = rkisp1_awb_gain_config_v10,
+ .aec_config = rkisp1_aec_config_v10,
+ .hst_config = rkisp1_hst_config_v10,
+ .hst_enable = rkisp1_hst_enable_v10,
+ .afm_config = rkisp1_afm_config_v10,
};
static int rkisp1_params_enum_fmt_meta_out(struct file *file, void *priv,
@@ -1472,7 +1472,7 @@ static void rkisp1_init_params(struct rkisp1_params *params)
params->vdev_fmt.fmt.meta.buffersize =
sizeof(struct rkisp1_params_cfg);
- params->ops = &rkisp1_params_ops;
+ params->ops = &rkisp1_v10_params_ops;
}
int rkisp1_params_register(struct rkisp1_device *rkisp1)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
index fa33080f51db..c71ccd148bde 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
@@ -212,6 +212,35 @@
/* CCL */
#define RKISP1_CIF_CCL_CIF_CLK_DIS BIT(2)
+/* VI_ISP_CLK_CTRL */
+#define RKISP1_CIF_CLK_CTRL_ISP_RAW BIT(0)
+#define RKISP1_CIF_CLK_CTRL_ISP_RGB BIT(1)
+#define RKISP1_CIF_CLK_CTRL_ISP_YUV BIT(2)
+#define RKISP1_CIF_CLK_CTRL_ISP_3A BIT(3)
+#define RKISP1_CIF_CLK_CTRL_MIPI_RAW BIT(4)
+#define RKISP1_CIF_CLK_CTRL_ISP_IE BIT(5)
+#define RKISP1_CIF_CLK_CTRL_RSZ_RAM BIT(6)
+#define RKISP1_CIF_CLK_CTRL_JPEG_RAM BIT(7)
+#define RKISP1_CIF_CLK_CTRL_ACLK_ISP BIT(8)
+#define RKISP1_CIF_CLK_CTRL_MI_IDC BIT(9)
+#define RKISP1_CIF_CLK_CTRL_MI_MP BIT(10)
+#define RKISP1_CIF_CLK_CTRL_MI_JPEG BIT(11)
+#define RKISP1_CIF_CLK_CTRL_MI_DP BIT(12)
+#define RKISP1_CIF_CLK_CTRL_MI_Y12 BIT(13)
+#define RKISP1_CIF_CLK_CTRL_MI_SP BIT(14)
+#define RKISP1_CIF_CLK_CTRL_MI_RAW0 BIT(15)
+#define RKISP1_CIF_CLK_CTRL_MI_RAW1 BIT(16)
+#define RKISP1_CIF_CLK_CTRL_MI_READ BIT(17)
+#define RKISP1_CIF_CLK_CTRL_MI_RAWRD BIT(18)
+#define RKISP1_CIF_CLK_CTRL_CP BIT(19)
+#define RKISP1_CIF_CLK_CTRL_IE BIT(20)
+#define RKISP1_CIF_CLK_CTRL_SI BIT(21)
+#define RKISP1_CIF_CLK_CTRL_RSZM BIT(22)
+#define RKISP1_CIF_CLK_CTRL_DPMUX BIT(23)
+#define RKISP1_CIF_CLK_CTRL_JPEG BIT(24)
+#define RKISP1_CIF_CLK_CTRL_RSZS BIT(25)
+#define RKISP1_CIF_CLK_CTRL_MIPI BIT(26)
+#define RKISP1_CIF_CLK_CTRL_MARVINMI BIT(27)
/* ICCL */
#define RKISP1_CIF_ICCL_ISP_CLK BIT(0)
#define RKISP1_CIF_ICCL_CP_CLK BIT(1)
@@ -346,26 +375,26 @@
#define RKISP1_CIF_SUPER_IMP_CTRL_TRANSP_DIS BIT(2)
/* ISP HISTOGRAM CALCULATION : ISP_HIST_PROP */
-#define RKISP1_CIF_ISP_HIST_PROP_MODE_DIS (0 << 0)
-#define RKISP1_CIF_ISP_HIST_PROP_MODE_RGB BIT(0)
-#define RKISP1_CIF_ISP_HIST_PROP_MODE_RED (2 << 0)
-#define RKISP1_CIF_ISP_HIST_PROP_MODE_GREEN (3 << 0)
-#define RKISP1_CIF_ISP_HIST_PROP_MODE_BLUE (4 << 0)
-#define RKISP1_CIF_ISP_HIST_PROP_MODE_LUM (5 << 0)
-#define RKISP1_CIF_ISP_HIST_PROP_MODE_MASK 0x7
-#define RKISP1_CIF_ISP_HIST_PREDIV_SET(x) (((x) & 0x7F) << 3)
-#define RKISP1_CIF_ISP_HIST_WEIGHT_SET(v0, v1, v2, v3) \
+#define RKISP1_CIF_ISP_HIST_PROP_MODE_DIS_V10 (0 << 0)
+#define RKISP1_CIF_ISP_HIST_PROP_MODE_RGB_V10 BIT(0)
+#define RKISP1_CIF_ISP_HIST_PROP_MODE_RED_V10 (2 << 0)
+#define RKISP1_CIF_ISP_HIST_PROP_MODE_GREEN_V10 (3 << 0)
+#define RKISP1_CIF_ISP_HIST_PROP_MODE_BLUE_V10 (4 << 0)
+#define RKISP1_CIF_ISP_HIST_PROP_MODE_LUM_V10 (5 << 0)
+#define RKISP1_CIF_ISP_HIST_PROP_MODE_MASK_V10 0x7
+#define RKISP1_CIF_ISP_HIST_PREDIV_SET_V10(x) (((x) & 0x7F) << 3)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_SET_V10(v0, v1, v2, v3) \
(((v0) & 0x1F) | (((v1) & 0x1F) << 8) |\
(((v2) & 0x1F) << 16) | \
(((v3) & 0x1F) << 24))
-#define RKISP1_CIF_ISP_HIST_WINDOW_OFFSET_RESERVED 0xFFFFF000
-#define RKISP1_CIF_ISP_HIST_WINDOW_SIZE_RESERVED 0xFFFFF800
-#define RKISP1_CIF_ISP_HIST_WEIGHT_RESERVED 0xE0E0E0E0
-#define RKISP1_CIF_ISP_MAX_HIST_PREDIVIDER 0x0000007F
-#define RKISP1_CIF_ISP_HIST_ROW_NUM 5
-#define RKISP1_CIF_ISP_HIST_COLUMN_NUM 5
-#define RKISP1_CIF_ISP_HIST_GET_BIN(x) ((x) & 0x000FFFFF)
+#define RKISP1_CIF_ISP_HIST_WINDOW_OFFSET_RESERVED_V10 0xFFFFF000
+#define RKISP1_CIF_ISP_HIST_WINDOW_SIZE_RESERVED_V10 0xFFFFF800
+#define RKISP1_CIF_ISP_HIST_WEIGHT_RESERVED_V10 0xE0E0E0E0
+#define RKISP1_CIF_ISP_MAX_HIST_PREDIVIDER_V10 0x0000007F
+#define RKISP1_CIF_ISP_HIST_ROW_NUM_V10 5
+#define RKISP1_CIF_ISP_HIST_COLUMN_NUM_V10 5
+#define RKISP1_CIF_ISP_HIST_GET_BIN_V10(x) ((x) & 0x000FFFFF)
/* AUTO FOCUS MEASUREMENT: ISP_AFM_CTRL */
#define RKISP1_ISP_AFM_CTRL_ENABLE BIT(0)
@@ -442,41 +471,41 @@
#define RKISP1_CIF_ISP_EXP_CTRL_MEASMODE_1 BIT(31)
/* ISP_EXP_H_SIZE */
-#define RKISP1_CIF_ISP_EXP_H_SIZE_SET(x) ((x) & 0x7FF)
-#define RKISP1_CIF_ISP_EXP_HEIGHT_MASK 0x000007FF
+#define RKISP1_CIF_ISP_EXP_H_SIZE_SET_V10(x) ((x) & 0x7FF)
+#define RKISP1_CIF_ISP_EXP_HEIGHT_MASK_V10 0x000007FF
/* ISP_EXP_V_SIZE : vertical size must be a multiple of 2). */
-#define RKISP1_CIF_ISP_EXP_V_SIZE_SET(x) ((x) & 0x7FE)
+#define RKISP1_CIF_ISP_EXP_V_SIZE_SET_V10(x) ((x) & 0x7FE)
/* ISP_EXP_H_OFFSET */
-#define RKISP1_CIF_ISP_EXP_H_OFFSET_SET(x) ((x) & 0x1FFF)
-#define RKISP1_CIF_ISP_EXP_MAX_HOFFS 2424
+#define RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V10(x) ((x) & 0x1FFF)
+#define RKISP1_CIF_ISP_EXP_MAX_HOFFS_V10 2424
/* ISP_EXP_V_OFFSET */
-#define RKISP1_CIF_ISP_EXP_V_OFFSET_SET(x) ((x) & 0x1FFF)
-#define RKISP1_CIF_ISP_EXP_MAX_VOFFS 1806
-
-#define RKISP1_CIF_ISP_EXP_ROW_NUM 5
-#define RKISP1_CIF_ISP_EXP_COLUMN_NUM 5
-#define RKISP1_CIF_ISP_EXP_NUM_LUMA_REGS \
- (RKISP1_CIF_ISP_EXP_ROW_NUM * RKISP1_CIF_ISP_EXP_COLUMN_NUM)
-#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE 516
-#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE 35
-#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE 390
-#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE 28
-#define RKISP1_CIF_ISP_EXP_MAX_HSIZE \
- (RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE * RKISP1_CIF_ISP_EXP_COLUMN_NUM + 1)
-#define RKISP1_CIF_ISP_EXP_MIN_HSIZE \
- (RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE * RKISP1_CIF_ISP_EXP_COLUMN_NUM + 1)
-#define RKISP1_CIF_ISP_EXP_MAX_VSIZE \
- (RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE * RKISP1_CIF_ISP_EXP_ROW_NUM + 1)
-#define RKISP1_CIF_ISP_EXP_MIN_VSIZE \
- (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE * RKISP1_CIF_ISP_EXP_ROW_NUM + 1)
+#define RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V10(x) ((x) & 0x1FFF)
+#define RKISP1_CIF_ISP_EXP_MAX_VOFFS_V10 1806
+
+#define RKISP1_CIF_ISP_EXP_ROW_NUM_V10 5
+#define RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 5
+#define RKISP1_CIF_ISP_EXP_NUM_LUMA_REGS_V10 \
+ (RKISP1_CIF_ISP_EXP_ROW_NUM_V10 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10)
+#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V10 516
+#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V10 35
+#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V10 390
+#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V10 28
+#define RKISP1_CIF_ISP_EXP_MAX_HSIZE_V10 \
+ (RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V10 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 + 1)
+#define RKISP1_CIF_ISP_EXP_MIN_HSIZE_V10 \
+ (RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V10 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 + 1)
+#define RKISP1_CIF_ISP_EXP_MAX_VSIZE_V10 \
+ (RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V10 * RKISP1_CIF_ISP_EXP_ROW_NUM_V10 + 1)
+#define RKISP1_CIF_ISP_EXP_MIN_VSIZE_V10 \
+ (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V10 * RKISP1_CIF_ISP_EXP_ROW_NUM_V10 + 1)
/* LSC: ISP_LSC_CTRL */
#define RKISP1_CIF_ISP_LSC_CTRL_ENA BIT(0)
#define RKISP1_CIF_ISP_LSC_SECT_SIZE_RESERVED 0xFC00FC00
-#define RKISP1_CIF_ISP_LSC_GRAD_RESERVED 0xF000F000
-#define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED 0xF000F000
-#define RKISP1_CIF_ISP_LSC_TABLE_DATA(v0, v1) \
+#define RKISP1_CIF_ISP_LSC_GRAD_RESERVED_V10 0xF000F000
+#define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED_V10 0xF000F000
+#define RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(v0, v1) \
(((v0) & 0xFFF) | (((v1) & 0xFFF) << 12))
#define RKISP1_CIF_ISP_LSC_SECT_SIZE(v0, v1) \
(((v0) & 0xFFF) | (((v1) & 0xFFF) << 16))
@@ -667,18 +696,18 @@
#define RKISP1_CIF_ISP_GAMMA_B_Y14 (RKISP1_CIF_ISP_BASE + 0x000000E4)
#define RKISP1_CIF_ISP_GAMMA_B_Y15 (RKISP1_CIF_ISP_BASE + 0x000000E8)
#define RKISP1_CIF_ISP_GAMMA_B_Y16 (RKISP1_CIF_ISP_BASE + 0x000000EC)
-#define RKISP1_CIF_ISP_AWB_PROP (RKISP1_CIF_ISP_BASE + 0x00000110)
-#define RKISP1_CIF_ISP_AWB_WND_H_OFFS (RKISP1_CIF_ISP_BASE + 0x00000114)
-#define RKISP1_CIF_ISP_AWB_WND_V_OFFS (RKISP1_CIF_ISP_BASE + 0x00000118)
-#define RKISP1_CIF_ISP_AWB_WND_H_SIZE (RKISP1_CIF_ISP_BASE + 0x0000011C)
-#define RKISP1_CIF_ISP_AWB_WND_V_SIZE (RKISP1_CIF_ISP_BASE + 0x00000120)
-#define RKISP1_CIF_ISP_AWB_FRAMES (RKISP1_CIF_ISP_BASE + 0x00000124)
-#define RKISP1_CIF_ISP_AWB_REF (RKISP1_CIF_ISP_BASE + 0x00000128)
-#define RKISP1_CIF_ISP_AWB_THRESH (RKISP1_CIF_ISP_BASE + 0x0000012C)
-#define RKISP1_CIF_ISP_AWB_GAIN_G (RKISP1_CIF_ISP_BASE + 0x00000138)
-#define RKISP1_CIF_ISP_AWB_GAIN_RB (RKISP1_CIF_ISP_BASE + 0x0000013C)
-#define RKISP1_CIF_ISP_AWB_WHITE_CNT (RKISP1_CIF_ISP_BASE + 0x00000140)
-#define RKISP1_CIF_ISP_AWB_MEAN (RKISP1_CIF_ISP_BASE + 0x00000144)
+#define RKISP1_CIF_ISP_AWB_PROP_V10 (RKISP1_CIF_ISP_BASE + 0x00000110)
+#define RKISP1_CIF_ISP_AWB_WND_H_OFFS_V10 (RKISP1_CIF_ISP_BASE + 0x00000114)
+#define RKISP1_CIF_ISP_AWB_WND_V_OFFS_V10 (RKISP1_CIF_ISP_BASE + 0x00000118)
+#define RKISP1_CIF_ISP_AWB_WND_H_SIZE_V10 (RKISP1_CIF_ISP_BASE + 0x0000011C)
+#define RKISP1_CIF_ISP_AWB_WND_V_SIZE_V10 (RKISP1_CIF_ISP_BASE + 0x00000120)
+#define RKISP1_CIF_ISP_AWB_FRAMES_V10 (RKISP1_CIF_ISP_BASE + 0x00000124)
+#define RKISP1_CIF_ISP_AWB_REF_V10 (RKISP1_CIF_ISP_BASE + 0x00000128)
+#define RKISP1_CIF_ISP_AWB_THRESH_V10 (RKISP1_CIF_ISP_BASE + 0x0000012C)
+#define RKISP1_CIF_ISP_AWB_GAIN_G_V10 (RKISP1_CIF_ISP_BASE + 0x00000138)
+#define RKISP1_CIF_ISP_AWB_GAIN_RB_V10 (RKISP1_CIF_ISP_BASE + 0x0000013C)
+#define RKISP1_CIF_ISP_AWB_WHITE_CNT_V10 (RKISP1_CIF_ISP_BASE + 0x00000140)
+#define RKISP1_CIF_ISP_AWB_MEAN_V10 (RKISP1_CIF_ISP_BASE + 0x00000144)
#define RKISP1_CIF_ISP_CC_COEFF_0 (RKISP1_CIF_ISP_BASE + 0x00000170)
#define RKISP1_CIF_ISP_CC_COEFF_1 (RKISP1_CIF_ISP_BASE + 0x00000174)
#define RKISP1_CIF_ISP_CC_COEFF_2 (RKISP1_CIF_ISP_BASE + 0x00000178)
@@ -712,24 +741,24 @@
#define RKISP1_CIF_ISP_CT_COEFF_6 (RKISP1_CIF_ISP_BASE + 0x000001E8)
#define RKISP1_CIF_ISP_CT_COEFF_7 (RKISP1_CIF_ISP_BASE + 0x000001EC)
#define RKISP1_CIF_ISP_CT_COEFF_8 (RKISP1_CIF_ISP_BASE + 0x000001F0)
-#define RKISP1_CIF_ISP_GAMMA_OUT_MODE (RKISP1_CIF_ISP_BASE + 0x000001F4)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_0 (RKISP1_CIF_ISP_BASE + 0x000001F8)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_1 (RKISP1_CIF_ISP_BASE + 0x000001FC)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_2 (RKISP1_CIF_ISP_BASE + 0x00000200)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_3 (RKISP1_CIF_ISP_BASE + 0x00000204)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_4 (RKISP1_CIF_ISP_BASE + 0x00000208)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_5 (RKISP1_CIF_ISP_BASE + 0x0000020C)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_6 (RKISP1_CIF_ISP_BASE + 0x00000210)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_7 (RKISP1_CIF_ISP_BASE + 0x00000214)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_8 (RKISP1_CIF_ISP_BASE + 0x00000218)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_9 (RKISP1_CIF_ISP_BASE + 0x0000021C)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_10 (RKISP1_CIF_ISP_BASE + 0x00000220)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_11 (RKISP1_CIF_ISP_BASE + 0x00000224)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_12 (RKISP1_CIF_ISP_BASE + 0x00000228)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_13 (RKISP1_CIF_ISP_BASE + 0x0000022C)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_14 (RKISP1_CIF_ISP_BASE + 0x00000230)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_15 (RKISP1_CIF_ISP_BASE + 0x00000234)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_16 (RKISP1_CIF_ISP_BASE + 0x00000238)
+#define RKISP1_CIF_ISP_GAMMA_OUT_MODE_V10 (RKISP1_CIF_ISP_BASE + 0x000001F4)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V10 (RKISP1_CIF_ISP_BASE + 0x000001F8)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_1_V10 (RKISP1_CIF_ISP_BASE + 0x000001FC)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_2_V10 (RKISP1_CIF_ISP_BASE + 0x00000200)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_3_V10 (RKISP1_CIF_ISP_BASE + 0x00000204)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_4_V10 (RKISP1_CIF_ISP_BASE + 0x00000208)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_5_V10 (RKISP1_CIF_ISP_BASE + 0x0000020C)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_6_V10 (RKISP1_CIF_ISP_BASE + 0x00000210)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_7_V10 (RKISP1_CIF_ISP_BASE + 0x00000214)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_8_V10 (RKISP1_CIF_ISP_BASE + 0x00000218)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_9_V10 (RKISP1_CIF_ISP_BASE + 0x0000021C)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_10_V10 (RKISP1_CIF_ISP_BASE + 0x00000220)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_11_V10 (RKISP1_CIF_ISP_BASE + 0x00000224)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_12_V10 (RKISP1_CIF_ISP_BASE + 0x00000228)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_13_V10 (RKISP1_CIF_ISP_BASE + 0x0000022C)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_14_V10 (RKISP1_CIF_ISP_BASE + 0x00000230)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_15_V10 (RKISP1_CIF_ISP_BASE + 0x00000234)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_16_V10 (RKISP1_CIF_ISP_BASE + 0x00000238)
#define RKISP1_CIF_ISP_ERR (RKISP1_CIF_ISP_BASE + 0x0000023C)
#define RKISP1_CIF_ISP_ERR_CLR (RKISP1_CIF_ISP_BASE + 0x00000240)
#define RKISP1_CIF_ISP_FRAME_COUNT (RKISP1_CIF_ISP_BASE + 0x00000244)
@@ -1005,36 +1034,35 @@
#define RKISP1_CIF_ISP_IS_H_SIZE_SHD (RKISP1_CIF_ISP_IS_BASE + 0x0000002C)
#define RKISP1_CIF_ISP_IS_V_SIZE_SHD (RKISP1_CIF_ISP_IS_BASE + 0x00000030)
-#define RKISP1_CIF_ISP_HIST_BASE 0x00002400
-
-#define RKISP1_CIF_ISP_HIST_PROP (RKISP1_CIF_ISP_HIST_BASE + 0x00000000)
-#define RKISP1_CIF_ISP_HIST_H_OFFS (RKISP1_CIF_ISP_HIST_BASE + 0x00000004)
-#define RKISP1_CIF_ISP_HIST_V_OFFS (RKISP1_CIF_ISP_HIST_BASE + 0x00000008)
-#define RKISP1_CIF_ISP_HIST_H_SIZE (RKISP1_CIF_ISP_HIST_BASE + 0x0000000C)
-#define RKISP1_CIF_ISP_HIST_V_SIZE (RKISP1_CIF_ISP_HIST_BASE + 0x00000010)
-#define RKISP1_CIF_ISP_HIST_BIN_0 (RKISP1_CIF_ISP_HIST_BASE + 0x00000014)
-#define RKISP1_CIF_ISP_HIST_BIN_1 (RKISP1_CIF_ISP_HIST_BASE + 0x00000018)
-#define RKISP1_CIF_ISP_HIST_BIN_2 (RKISP1_CIF_ISP_HIST_BASE + 0x0000001C)
-#define RKISP1_CIF_ISP_HIST_BIN_3 (RKISP1_CIF_ISP_HIST_BASE + 0x00000020)
-#define RKISP1_CIF_ISP_HIST_BIN_4 (RKISP1_CIF_ISP_HIST_BASE + 0x00000024)
-#define RKISP1_CIF_ISP_HIST_BIN_5 (RKISP1_CIF_ISP_HIST_BASE + 0x00000028)
-#define RKISP1_CIF_ISP_HIST_BIN_6 (RKISP1_CIF_ISP_HIST_BASE + 0x0000002C)
-#define RKISP1_CIF_ISP_HIST_BIN_7 (RKISP1_CIF_ISP_HIST_BASE + 0x00000030)
-#define RKISP1_CIF_ISP_HIST_BIN_8 (RKISP1_CIF_ISP_HIST_BASE + 0x00000034)
-#define RKISP1_CIF_ISP_HIST_BIN_9 (RKISP1_CIF_ISP_HIST_BASE + 0x00000038)
-#define RKISP1_CIF_ISP_HIST_BIN_10 (RKISP1_CIF_ISP_HIST_BASE + 0x0000003C)
-#define RKISP1_CIF_ISP_HIST_BIN_11 (RKISP1_CIF_ISP_HIST_BASE + 0x00000040)
-#define RKISP1_CIF_ISP_HIST_BIN_12 (RKISP1_CIF_ISP_HIST_BASE + 0x00000044)
-#define RKISP1_CIF_ISP_HIST_BIN_13 (RKISP1_CIF_ISP_HIST_BASE + 0x00000048)
-#define RKISP1_CIF_ISP_HIST_BIN_14 (RKISP1_CIF_ISP_HIST_BASE + 0x0000004C)
-#define RKISP1_CIF_ISP_HIST_BIN_15 (RKISP1_CIF_ISP_HIST_BASE + 0x00000050)
-#define RKISP1_CIF_ISP_HIST_WEIGHT_00TO30 (RKISP1_CIF_ISP_HIST_BASE + 0x00000054)
-#define RKISP1_CIF_ISP_HIST_WEIGHT_40TO21 (RKISP1_CIF_ISP_HIST_BASE + 0x00000058)
-#define RKISP1_CIF_ISP_HIST_WEIGHT_31TO12 (RKISP1_CIF_ISP_HIST_BASE + 0x0000005C)
-#define RKISP1_CIF_ISP_HIST_WEIGHT_22TO03 (RKISP1_CIF_ISP_HIST_BASE + 0x00000060)
-#define RKISP1_CIF_ISP_HIST_WEIGHT_13TO43 (RKISP1_CIF_ISP_HIST_BASE + 0x00000064)
-#define RKISP1_CIF_ISP_HIST_WEIGHT_04TO34 (RKISP1_CIF_ISP_HIST_BASE + 0x00000068)
-#define RKISP1_CIF_ISP_HIST_WEIGHT_44 (RKISP1_CIF_ISP_HIST_BASE + 0x0000006C)
+#define RKISP1_CIF_ISP_HIST_BASE_V10 0x00002400
+#define RKISP1_CIF_ISP_HIST_PROP_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000000)
+#define RKISP1_CIF_ISP_HIST_H_OFFS_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000004)
+#define RKISP1_CIF_ISP_HIST_V_OFFS_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000008)
+#define RKISP1_CIF_ISP_HIST_H_SIZE_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000000C)
+#define RKISP1_CIF_ISP_HIST_V_SIZE_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000010)
+#define RKISP1_CIF_ISP_HIST_BIN_0_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000014)
+#define RKISP1_CIF_ISP_HIST_BIN_1_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000018)
+#define RKISP1_CIF_ISP_HIST_BIN_2_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000001C)
+#define RKISP1_CIF_ISP_HIST_BIN_3_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000020)
+#define RKISP1_CIF_ISP_HIST_BIN_4_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000024)
+#define RKISP1_CIF_ISP_HIST_BIN_5_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000028)
+#define RKISP1_CIF_ISP_HIST_BIN_6_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000002C)
+#define RKISP1_CIF_ISP_HIST_BIN_7_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000030)
+#define RKISP1_CIF_ISP_HIST_BIN_8_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000034)
+#define RKISP1_CIF_ISP_HIST_BIN_9_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000038)
+#define RKISP1_CIF_ISP_HIST_BIN_10_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000003C)
+#define RKISP1_CIF_ISP_HIST_BIN_11_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000040)
+#define RKISP1_CIF_ISP_HIST_BIN_12_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000044)
+#define RKISP1_CIF_ISP_HIST_BIN_13_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000048)
+#define RKISP1_CIF_ISP_HIST_BIN_14_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000004C)
+#define RKISP1_CIF_ISP_HIST_BIN_15_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000050)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_00TO30_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000054)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_40TO21_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000058)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_31TO12_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000005C)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_22TO03_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000060)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_13TO43_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000064)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_04TO34_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000068)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_44_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000006C)
#define RKISP1_CIF_ISP_FILT_BASE 0x00002500
#define RKISP1_CIF_ISP_FILT_MODE (RKISP1_CIF_ISP_FILT_BASE + 0x00000000)
@@ -1060,35 +1088,35 @@
#define RKISP1_CIF_ISP_EXP_BASE 0x00002600
#define RKISP1_CIF_ISP_EXP_CTRL (RKISP1_CIF_ISP_EXP_BASE + 0x00000000)
-#define RKISP1_CIF_ISP_EXP_H_OFFSET (RKISP1_CIF_ISP_EXP_BASE + 0x00000004)
-#define RKISP1_CIF_ISP_EXP_V_OFFSET (RKISP1_CIF_ISP_EXP_BASE + 0x00000008)
-#define RKISP1_CIF_ISP_EXP_H_SIZE (RKISP1_CIF_ISP_EXP_BASE + 0x0000000C)
-#define RKISP1_CIF_ISP_EXP_V_SIZE (RKISP1_CIF_ISP_EXP_BASE + 0x00000010)
-#define RKISP1_CIF_ISP_EXP_MEAN_00 (RKISP1_CIF_ISP_EXP_BASE + 0x00000014)
-#define RKISP1_CIF_ISP_EXP_MEAN_10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000018)
-#define RKISP1_CIF_ISP_EXP_MEAN_20 (RKISP1_CIF_ISP_EXP_BASE + 0x0000001c)
-#define RKISP1_CIF_ISP_EXP_MEAN_30 (RKISP1_CIF_ISP_EXP_BASE + 0x00000020)
-#define RKISP1_CIF_ISP_EXP_MEAN_40 (RKISP1_CIF_ISP_EXP_BASE + 0x00000024)
-#define RKISP1_CIF_ISP_EXP_MEAN_01 (RKISP1_CIF_ISP_EXP_BASE + 0x00000028)
-#define RKISP1_CIF_ISP_EXP_MEAN_11 (RKISP1_CIF_ISP_EXP_BASE + 0x0000002c)
-#define RKISP1_CIF_ISP_EXP_MEAN_21 (RKISP1_CIF_ISP_EXP_BASE + 0x00000030)
-#define RKISP1_CIF_ISP_EXP_MEAN_31 (RKISP1_CIF_ISP_EXP_BASE + 0x00000034)
-#define RKISP1_CIF_ISP_EXP_MEAN_41 (RKISP1_CIF_ISP_EXP_BASE + 0x00000038)
-#define RKISP1_CIF_ISP_EXP_MEAN_02 (RKISP1_CIF_ISP_EXP_BASE + 0x0000003c)
-#define RKISP1_CIF_ISP_EXP_MEAN_12 (RKISP1_CIF_ISP_EXP_BASE + 0x00000040)
-#define RKISP1_CIF_ISP_EXP_MEAN_22 (RKISP1_CIF_ISP_EXP_BASE + 0x00000044)
-#define RKISP1_CIF_ISP_EXP_MEAN_32 (RKISP1_CIF_ISP_EXP_BASE + 0x00000048)
-#define RKISP1_CIF_ISP_EXP_MEAN_42 (RKISP1_CIF_ISP_EXP_BASE + 0x0000004c)
-#define RKISP1_CIF_ISP_EXP_MEAN_03 (RKISP1_CIF_ISP_EXP_BASE + 0x00000050)
-#define RKISP1_CIF_ISP_EXP_MEAN_13 (RKISP1_CIF_ISP_EXP_BASE + 0x00000054)
-#define RKISP1_CIF_ISP_EXP_MEAN_23 (RKISP1_CIF_ISP_EXP_BASE + 0x00000058)
-#define RKISP1_CIF_ISP_EXP_MEAN_33 (RKISP1_CIF_ISP_EXP_BASE + 0x0000005c)
-#define RKISP1_CIF_ISP_EXP_MEAN_43 (RKISP1_CIF_ISP_EXP_BASE + 0x00000060)
-#define RKISP1_CIF_ISP_EXP_MEAN_04 (RKISP1_CIF_ISP_EXP_BASE + 0x00000064)
-#define RKISP1_CIF_ISP_EXP_MEAN_14 (RKISP1_CIF_ISP_EXP_BASE + 0x00000068)
-#define RKISP1_CIF_ISP_EXP_MEAN_24 (RKISP1_CIF_ISP_EXP_BASE + 0x0000006c)
-#define RKISP1_CIF_ISP_EXP_MEAN_34 (RKISP1_CIF_ISP_EXP_BASE + 0x00000070)
-#define RKISP1_CIF_ISP_EXP_MEAN_44 (RKISP1_CIF_ISP_EXP_BASE + 0x00000074)
+#define RKISP1_CIF_ISP_EXP_H_OFFSET_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000004)
+#define RKISP1_CIF_ISP_EXP_V_OFFSET_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000008)
+#define RKISP1_CIF_ISP_EXP_H_SIZE_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000000C)
+#define RKISP1_CIF_ISP_EXP_V_SIZE_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000010)
+#define RKISP1_CIF_ISP_EXP_MEAN_00_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000014)
+#define RKISP1_CIF_ISP_EXP_MEAN_10_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000018)
+#define RKISP1_CIF_ISP_EXP_MEAN_20_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000001c)
+#define RKISP1_CIF_ISP_EXP_MEAN_30_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000020)
+#define RKISP1_CIF_ISP_EXP_MEAN_40_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000024)
+#define RKISP1_CIF_ISP_EXP_MEAN_01_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000028)
+#define RKISP1_CIF_ISP_EXP_MEAN_11_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000002c)
+#define RKISP1_CIF_ISP_EXP_MEAN_21_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000030)
+#define RKISP1_CIF_ISP_EXP_MEAN_31_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000034)
+#define RKISP1_CIF_ISP_EXP_MEAN_41_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000038)
+#define RKISP1_CIF_ISP_EXP_MEAN_02_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000003c)
+#define RKISP1_CIF_ISP_EXP_MEAN_12_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000040)
+#define RKISP1_CIF_ISP_EXP_MEAN_22_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000044)
+#define RKISP1_CIF_ISP_EXP_MEAN_32_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000048)
+#define RKISP1_CIF_ISP_EXP_MEAN_42_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000004c)
+#define RKISP1_CIF_ISP_EXP_MEAN_03_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000050)
+#define RKISP1_CIF_ISP_EXP_MEAN_13_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000054)
+#define RKISP1_CIF_ISP_EXP_MEAN_23_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000058)
+#define RKISP1_CIF_ISP_EXP_MEAN_33_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000005c)
+#define RKISP1_CIF_ISP_EXP_MEAN_43_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000060)
+#define RKISP1_CIF_ISP_EXP_MEAN_04_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000064)
+#define RKISP1_CIF_ISP_EXP_MEAN_14_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000068)
+#define RKISP1_CIF_ISP_EXP_MEAN_24_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000006c)
+#define RKISP1_CIF_ISP_EXP_MEAN_34_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000070)
+#define RKISP1_CIF_ISP_EXP_MEAN_44_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000074)
#define RKISP1_CIF_ISP_BLS_BASE 0x00002700
#define RKISP1_CIF_ISP_BLS_CTRL (RKISP1_CIF_ISP_BLS_BASE + 0x00000000)
@@ -1260,4 +1288,7 @@
#define RKISP1_CIF_ISP_VSM_DELTA_H (RKISP1_CIF_ISP_VSM_BASE + 0x0000001C)
#define RKISP1_CIF_ISP_VSM_DELTA_V (RKISP1_CIF_ISP_VSM_BASE + 0x00000020)
+#define RKISP1_CIF_ISP_CSI0_BASE 0x00007000
+#define RKISP1_CIF_ISP_CSI0_CTRL0 (RKISP1_CIF_ISP_CSI0_BASE + 0x00000000)
+
#endif /* _RKISP1_REGS_H */
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
index f68a5e78e54a..3f286c55ad60 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
@@ -175,18 +175,18 @@ rkisp1_stats_init_vb2_queue(struct vb2_queue *q, struct rkisp1_stats *stats)
return vb2_queue_init(q);
}
-static void rkisp1_stats_get_awb_meas(struct rkisp1_stats *stats,
- struct rkisp1_stat_buffer *pbuf)
+static void rkisp1_stats_get_awb_meas_v10(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf)
{
/* Protect against concurrent access from ISR? */
struct rkisp1_device *rkisp1 = stats->rkisp1;
u32 reg_val;
pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AWB;
- reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_WHITE_CNT);
+ reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_WHITE_CNT_V10);
pbuf->params.awb.awb_mean[0].cnt =
RKISP1_CIF_ISP_AWB_GET_PIXEL_CNT(reg_val);
- reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_MEAN);
+ reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_MEAN_V10);
pbuf->params.awb.awb_mean[0].mean_cr_or_r =
RKISP1_CIF_ISP_AWB_GET_MEAN_CR_R(reg_val);
@@ -196,8 +196,8 @@ static void rkisp1_stats_get_awb_meas(struct rkisp1_stats *stats,
RKISP1_CIF_ISP_AWB_GET_MEAN_Y_G(reg_val);
}
-static void rkisp1_stats_get_aec_meas(struct rkisp1_stats *stats,
- struct rkisp1_stat_buffer *pbuf)
+static void rkisp1_stats_get_aec_meas_v10(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf)
{
struct rkisp1_device *rkisp1 = stats->rkisp1;
unsigned int i;
@@ -206,7 +206,7 @@ static void rkisp1_stats_get_aec_meas(struct rkisp1_stats *stats,
for (i = 0; i < RKISP1_CIF_ISP_AE_MEAN_MAX_V10; i++)
pbuf->params.ae.exp_mean[i] =
(u8)rkisp1_read(rkisp1,
- RKISP1_CIF_ISP_EXP_MEAN_00 + i * 4);
+ RKISP1_CIF_ISP_EXP_MEAN_00_V10 + i * 4);
}
static void rkisp1_stats_get_afc_meas(struct rkisp1_stats *stats,
@@ -226,17 +226,17 @@ static void rkisp1_stats_get_afc_meas(struct rkisp1_stats *stats,
af->window[2].lum = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AFM_LUM_C);
}
-static void rkisp1_stats_get_hst_meas(struct rkisp1_stats *stats,
- struct rkisp1_stat_buffer *pbuf)
+static void rkisp1_stats_get_hst_meas_v10(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf)
{
struct rkisp1_device *rkisp1 = stats->rkisp1;
unsigned int i;
pbuf->meas_type |= RKISP1_CIF_ISP_STAT_HIST;
for (i = 0; i < RKISP1_CIF_ISP_HIST_BIN_N_MAX_V10; i++) {
- u32 reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_HIST_BIN_0 + i * 4);
+ u32 reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_HIST_BIN_0_V10 + i * 4);
- pbuf->params.hist.hist_bins[i] = RKISP1_CIF_ISP_HIST_GET_BIN(reg_val);
+ pbuf->params.hist.hist_bins[i] = RKISP1_CIF_ISP_HIST_GET_BIN_V10(reg_val);
}
}
@@ -287,10 +287,10 @@ static void rkisp1_stats_get_bls_meas(struct rkisp1_stats *stats,
}
}
-static struct rkisp1_stats_ops rkisp1_stats_ops = {
- .get_awb_meas = rkisp1_stats_get_awb_meas,
- .get_aec_meas = rkisp1_stats_get_aec_meas,
- .get_hst_meas = rkisp1_stats_get_hst_meas,
+static struct rkisp1_stats_ops rkisp1_v10_stats_ops = {
+ .get_awb_meas = rkisp1_stats_get_awb_meas_v10,
+ .get_aec_meas = rkisp1_stats_get_aec_meas_v10,
+ .get_hst_meas = rkisp1_stats_get_hst_meas_v10,
};
static void
@@ -361,7 +361,7 @@ static void rkisp1_init_stats(struct rkisp1_stats *stats)
stats->vdev_fmt.fmt.meta.buffersize =
sizeof(struct rkisp1_stat_buffer);
- stats->ops = &rkisp1_stats_ops;
+ stats->ops = &rkisp1_v10_stats_ops;
}
int rkisp1_stats_register(struct rkisp1_device *rkisp1)
--
2.29.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v2 5/7] media: rockchip: rkisp1: add prefixes for v10 specific parts
@ 2021-06-15 0:37 ` Heiko Stuebner
0 siblings, 0 replies; 38+ messages in thread
From: Heiko Stuebner @ 2021-06-15 0:37 UTC (permalink / raw)
To: mchehab, hverkuil-cisco
Cc: ezequiel, dafna.hirschfeld, helen.koike, Laurent.pinchart,
linux-rockchip, linux-media, heiko, Heiko Stuebner
From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
The rkisp1 evolved over soc generations and the rk3326/px30 introduced
the so called v12 - probably meaning v1.2.
In a first step adapt the affected v10 parts to give them a
matching suffix to enable us to add v12 variants later on.
Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
---
.../platform/rockchip/rkisp1/rkisp1-params.c | 180 +++++------
.../platform/rockchip/rkisp1/rkisp1-regs.h | 295 ++++++++++--------
.../platform/rockchip/rkisp1/rkisp1-stats.c | 32 +-
3 files changed, 269 insertions(+), 238 deletions(-)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
index a971892ba81d..427c7cc400b2 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
@@ -185,8 +185,8 @@ static void rkisp1_bls_config(struct rkisp1_params *params,
/* ISP LS correction interface function */
static void
-rkisp1_lsc_matrix_config(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_lsc_config *pconfig)
+rkisp1_lsc_matrix_config_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_lsc_config *pconfig)
{
unsigned int isp_lsc_status, sram_addr, isp_lsc_table_sel, i, j, data;
@@ -212,39 +212,39 @@ rkisp1_lsc_matrix_config(struct rkisp1_params *params,
* DWORDs (2nd value of last DWORD unused)
*/
for (j = 0; j < RKISP1_CIF_ISP_LSC_SAMPLES_MAX - 1; j += 2) {
- data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->r_data_tbl[i][j],
- pconfig->r_data_tbl[i][j + 1]);
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->r_data_tbl[i][j],
+ pconfig->r_data_tbl[i][j + 1]);
rkisp1_write(params->rkisp1, data,
RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
- data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->gr_data_tbl[i][j],
- pconfig->gr_data_tbl[i][j + 1]);
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->gr_data_tbl[i][j],
+ pconfig->gr_data_tbl[i][j + 1]);
rkisp1_write(params->rkisp1, data,
RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
- data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->gb_data_tbl[i][j],
- pconfig->gb_data_tbl[i][j + 1]);
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->gb_data_tbl[i][j],
+ pconfig->gb_data_tbl[i][j + 1]);
rkisp1_write(params->rkisp1, data,
RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
- data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->b_data_tbl[i][j],
- pconfig->b_data_tbl[i][j + 1]);
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->b_data_tbl[i][j],
+ pconfig->b_data_tbl[i][j + 1]);
rkisp1_write(params->rkisp1, data,
RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
}
- data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->r_data_tbl[i][j], 0);
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->r_data_tbl[i][j], 0);
rkisp1_write(params->rkisp1, data,
RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
- data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->gr_data_tbl[i][j], 0);
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->gr_data_tbl[i][j], 0);
rkisp1_write(params->rkisp1, data,
RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
- data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->gb_data_tbl[i][j], 0);
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->gb_data_tbl[i][j], 0);
rkisp1_write(params->rkisp1, data,
RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
- data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->b_data_tbl[i][j], 0);
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->b_data_tbl[i][j], 0);
rkisp1_write(params->rkisp1, data,
RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
}
@@ -382,18 +382,18 @@ static void rkisp1_sdg_config(struct rkisp1_params *params,
}
/* ISP GAMMA correction interface function */
-static void rkisp1_goc_config(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_goc_config *arg)
+static void rkisp1_goc_config_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_goc_config *arg)
{
unsigned int i;
rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
RKISP1_CIF_ISP_CTRL_ISP_GAMMA_OUT_ENA);
- rkisp1_write(params->rkisp1, arg->mode, RKISP1_CIF_ISP_GAMMA_OUT_MODE);
+ rkisp1_write(params->rkisp1, arg->mode, RKISP1_CIF_ISP_GAMMA_OUT_MODE_V10);
for (i = 0; i < RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10; i++)
rkisp1_write(params->rkisp1, arg->gamma_y[i],
- RKISP1_CIF_ISP_GAMMA_OUT_Y_0 + i * 4);
+ RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V10 + i * 4);
}
/* ISP Cross Talk */
@@ -433,8 +433,8 @@ static void rkisp1_ctk_enable(struct rkisp1_params *params, bool en)
}
/* ISP White Balance Mode */
-static void rkisp1_awb_meas_config(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_awb_meas_config *arg)
+static void rkisp1_awb_meas_config_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_meas_config *arg)
{
u32 reg_val = 0;
/* based on the mode,configure the awb module */
@@ -442,43 +442,43 @@ static void rkisp1_awb_meas_config(struct rkisp1_params *params,
/* Reference Cb and Cr */
rkisp1_write(params->rkisp1,
RKISP1_CIF_ISP_AWB_REF_CR_SET(arg->awb_ref_cr) |
- arg->awb_ref_cb, RKISP1_CIF_ISP_AWB_REF);
+ arg->awb_ref_cb, RKISP1_CIF_ISP_AWB_REF_V10);
/* Yc Threshold */
rkisp1_write(params->rkisp1,
RKISP1_CIF_ISP_AWB_MAX_Y_SET(arg->max_y) |
RKISP1_CIF_ISP_AWB_MIN_Y_SET(arg->min_y) |
RKISP1_CIF_ISP_AWB_MAX_CS_SET(arg->max_csum) |
- arg->min_c, RKISP1_CIF_ISP_AWB_THRESH);
+ arg->min_c, RKISP1_CIF_ISP_AWB_THRESH_V10);
}
- reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP);
+ reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V10);
if (arg->enable_ymax_cmp)
reg_val |= RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
else
reg_val &= ~RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
- rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP);
+ rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V10);
/* window offset */
rkisp1_write(params->rkisp1,
- arg->awb_wnd.v_offs, RKISP1_CIF_ISP_AWB_WND_V_OFFS);
+ arg->awb_wnd.v_offs, RKISP1_CIF_ISP_AWB_WND_V_OFFS_V10);
rkisp1_write(params->rkisp1,
- arg->awb_wnd.h_offs, RKISP1_CIF_ISP_AWB_WND_H_OFFS);
+ arg->awb_wnd.h_offs, RKISP1_CIF_ISP_AWB_WND_H_OFFS_V10);
/* AWB window size */
rkisp1_write(params->rkisp1,
- arg->awb_wnd.v_size, RKISP1_CIF_ISP_AWB_WND_V_SIZE);
+ arg->awb_wnd.v_size, RKISP1_CIF_ISP_AWB_WND_V_SIZE_V10);
rkisp1_write(params->rkisp1,
- arg->awb_wnd.h_size, RKISP1_CIF_ISP_AWB_WND_H_SIZE);
+ arg->awb_wnd.h_size, RKISP1_CIF_ISP_AWB_WND_H_SIZE_V10);
/* Number of frames */
rkisp1_write(params->rkisp1,
- arg->frames, RKISP1_CIF_ISP_AWB_FRAMES);
+ arg->frames, RKISP1_CIF_ISP_AWB_FRAMES_V10);
}
static void
-rkisp1_awb_meas_enable(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_awb_meas_config *arg,
- bool en)
+rkisp1_awb_meas_enable_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_meas_config *arg,
+ bool en)
{
- u32 reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP);
+ u32 reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V10);
/* switch off */
reg_val &= RKISP1_CIF_ISP_AWB_MODE_MASK_NONE;
@@ -489,34 +489,34 @@ rkisp1_awb_meas_enable(struct rkisp1_params *params,
else
reg_val |= RKISP1_CIF_ISP_AWB_MODE_YCBCR_EN;
- rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP);
+ rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V10);
/* Measurements require AWB block be active. */
rkisp1_param_set_bits(params, RKISP1_CIF_ISP_CTRL,
RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
} else {
rkisp1_write(params->rkisp1,
- reg_val, RKISP1_CIF_ISP_AWB_PROP);
+ reg_val, RKISP1_CIF_ISP_AWB_PROP_V10);
rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
}
}
static void
-rkisp1_awb_gain_config(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_awb_gain_config *arg)
+rkisp1_awb_gain_config_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_gain_config *arg)
{
rkisp1_write(params->rkisp1,
RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_green_r) |
- arg->gain_green_b, RKISP1_CIF_ISP_AWB_GAIN_G);
+ arg->gain_green_b, RKISP1_CIF_ISP_AWB_GAIN_G_V10);
rkisp1_write(params->rkisp1,
RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_red) |
- arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB);
+ arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB_V10);
}
-static void rkisp1_aec_config(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_aec_config *arg)
+static void rkisp1_aec_config_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_aec_config *arg)
{
unsigned int block_hsize, block_vsize;
u32 exp_ctrl;
@@ -531,21 +531,21 @@ static void rkisp1_aec_config(struct rkisp1_params *params,
rkisp1_write(params->rkisp1, exp_ctrl, RKISP1_CIF_ISP_EXP_CTRL);
rkisp1_write(params->rkisp1,
- arg->meas_window.h_offs, RKISP1_CIF_ISP_EXP_H_OFFSET);
+ arg->meas_window.h_offs, RKISP1_CIF_ISP_EXP_H_OFFSET_V10);
rkisp1_write(params->rkisp1,
- arg->meas_window.v_offs, RKISP1_CIF_ISP_EXP_V_OFFSET);
+ arg->meas_window.v_offs, RKISP1_CIF_ISP_EXP_V_OFFSET_V10);
block_hsize = arg->meas_window.h_size /
- RKISP1_CIF_ISP_EXP_COLUMN_NUM - 1;
+ RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 - 1;
block_vsize = arg->meas_window.v_size /
- RKISP1_CIF_ISP_EXP_ROW_NUM - 1;
+ RKISP1_CIF_ISP_EXP_ROW_NUM_V10 - 1;
rkisp1_write(params->rkisp1,
- RKISP1_CIF_ISP_EXP_H_SIZE_SET(block_hsize),
- RKISP1_CIF_ISP_EXP_H_SIZE);
+ RKISP1_CIF_ISP_EXP_H_SIZE_SET_V10(block_hsize),
+ RKISP1_CIF_ISP_EXP_H_SIZE_V10);
rkisp1_write(params->rkisp1,
- RKISP1_CIF_ISP_EXP_V_SIZE_SET(block_vsize),
- RKISP1_CIF_ISP_EXP_V_SIZE);
+ RKISP1_CIF_ISP_EXP_V_SIZE_SET_V10(block_vsize),
+ RKISP1_CIF_ISP_EXP_V_SIZE_V10);
}
static void rkisp1_cproc_config(struct rkisp1_params *params,
@@ -578,73 +578,73 @@ static void rkisp1_cproc_config(struct rkisp1_params *params,
}
}
-static void rkisp1_hst_config(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_hst_config *arg)
+static void rkisp1_hst_config_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_hst_config *arg)
{
unsigned int block_hsize, block_vsize;
static const u32 hist_weight_regs[] = {
- RKISP1_CIF_ISP_HIST_WEIGHT_00TO30,
- RKISP1_CIF_ISP_HIST_WEIGHT_40TO21,
- RKISP1_CIF_ISP_HIST_WEIGHT_31TO12,
- RKISP1_CIF_ISP_HIST_WEIGHT_22TO03,
- RKISP1_CIF_ISP_HIST_WEIGHT_13TO43,
- RKISP1_CIF_ISP_HIST_WEIGHT_04TO34,
+ RKISP1_CIF_ISP_HIST_WEIGHT_00TO30_V10,
+ RKISP1_CIF_ISP_HIST_WEIGHT_40TO21_V10,
+ RKISP1_CIF_ISP_HIST_WEIGHT_31TO12_V10,
+ RKISP1_CIF_ISP_HIST_WEIGHT_22TO03_V10,
+ RKISP1_CIF_ISP_HIST_WEIGHT_13TO43_V10,
+ RKISP1_CIF_ISP_HIST_WEIGHT_04TO34_V10,
};
const u8 *weight;
unsigned int i;
u32 hist_prop;
/* avoid to override the old enable value */
- hist_prop = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_HIST_PROP);
- hist_prop &= RKISP1_CIF_ISP_HIST_PROP_MODE_MASK;
- hist_prop |= RKISP1_CIF_ISP_HIST_PREDIV_SET(arg->histogram_predivider);
- rkisp1_write(params->rkisp1, hist_prop, RKISP1_CIF_ISP_HIST_PROP);
+ hist_prop = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_HIST_PROP_V10);
+ hist_prop &= RKISP1_CIF_ISP_HIST_PROP_MODE_MASK_V10;
+ hist_prop |= RKISP1_CIF_ISP_HIST_PREDIV_SET_V10(arg->histogram_predivider);
+ rkisp1_write(params->rkisp1, hist_prop, RKISP1_CIF_ISP_HIST_PROP_V10);
rkisp1_write(params->rkisp1,
arg->meas_window.h_offs,
- RKISP1_CIF_ISP_HIST_H_OFFS);
+ RKISP1_CIF_ISP_HIST_H_OFFS_V10);
rkisp1_write(params->rkisp1,
arg->meas_window.v_offs,
- RKISP1_CIF_ISP_HIST_V_OFFS);
+ RKISP1_CIF_ISP_HIST_V_OFFS_V10);
block_hsize = arg->meas_window.h_size /
- RKISP1_CIF_ISP_HIST_COLUMN_NUM - 1;
- block_vsize = arg->meas_window.v_size / RKISP1_CIF_ISP_HIST_ROW_NUM - 1;
+ RKISP1_CIF_ISP_HIST_COLUMN_NUM_V10 - 1;
+ block_vsize = arg->meas_window.v_size / RKISP1_CIF_ISP_HIST_ROW_NUM_V10 - 1;
- rkisp1_write(params->rkisp1, block_hsize, RKISP1_CIF_ISP_HIST_H_SIZE);
- rkisp1_write(params->rkisp1, block_vsize, RKISP1_CIF_ISP_HIST_V_SIZE);
+ rkisp1_write(params->rkisp1, block_hsize, RKISP1_CIF_ISP_HIST_H_SIZE_V10);
+ rkisp1_write(params->rkisp1, block_vsize, RKISP1_CIF_ISP_HIST_V_SIZE_V10);
weight = arg->hist_weight;
for (i = 0; i < ARRAY_SIZE(hist_weight_regs); ++i, weight += 4)
rkisp1_write(params->rkisp1,
- RKISP1_CIF_ISP_HIST_WEIGHT_SET(weight[0],
+ RKISP1_CIF_ISP_HIST_WEIGHT_SET_V10(weight[0],
weight[1],
weight[2],
weight[3]),
hist_weight_regs[i]);
- rkisp1_write(params->rkisp1, weight[0] & 0x1F, RKISP1_CIF_ISP_HIST_WEIGHT_44);
+ rkisp1_write(params->rkisp1, weight[0] & 0x1F, RKISP1_CIF_ISP_HIST_WEIGHT_44_V10);
}
static void
-rkisp1_hst_enable(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_hst_config *arg, bool en)
+rkisp1_hst_enable_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_hst_config *arg, bool en)
{
if (en) {
u32 hist_prop = rkisp1_read(params->rkisp1,
- RKISP1_CIF_ISP_HIST_PROP);
+ RKISP1_CIF_ISP_HIST_PROP_V10);
- hist_prop &= ~RKISP1_CIF_ISP_HIST_PROP_MODE_MASK;
+ hist_prop &= ~RKISP1_CIF_ISP_HIST_PROP_MODE_MASK_V10;
hist_prop |= arg->mode;
- rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP,
+ rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP_V10,
hist_prop);
} else {
- rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_HIST_PROP,
- RKISP1_CIF_ISP_HIST_PROP_MODE_MASK);
+ rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_HIST_PROP_V10,
+ RKISP1_CIF_ISP_HIST_PROP_MODE_MASK_V10);
}
}
-static void rkisp1_afm_config(struct rkisp1_params *params,
- const struct rkisp1_cif_isp_afc_config *arg)
+static void rkisp1_afm_config_v10(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_afc_config *arg)
{
size_t num_of_win = min_t(size_t, ARRAY_SIZE(arg->afm_win),
arg->num_afm_win);
@@ -1234,7 +1234,7 @@ static void rkisp1_params_config_parameter(struct rkisp1_params *params)
memset(hst.hist_weight, 0x01, sizeof(hst.hist_weight));
params->ops->hst_config(params, &hst);
- rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP,
+ rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP_V10,
rkisp1_hst_params_default_config.mode);
/* set the range */
@@ -1293,16 +1293,16 @@ void rkisp1_params_disable(struct rkisp1_params *params)
RKISP1_CIF_ISP_DPF_MODE_EN);
}
-static struct rkisp1_params_ops rkisp1_params_ops = {
- .lsc_matrix_config = rkisp1_lsc_matrix_config,
- .goc_config = rkisp1_goc_config,
- .awb_meas_config = rkisp1_awb_meas_config,
- .awb_meas_enable = rkisp1_awb_meas_enable,
- .awb_gain_config = rkisp1_awb_gain_config,
- .aec_config = rkisp1_aec_config,
- .hst_config = rkisp1_hst_config,
- .hst_enable = rkisp1_hst_enable,
- .afm_config = rkisp1_afm_config,
+static struct rkisp1_params_ops rkisp1_v10_params_ops = {
+ .lsc_matrix_config = rkisp1_lsc_matrix_config_v10,
+ .goc_config = rkisp1_goc_config_v10,
+ .awb_meas_config = rkisp1_awb_meas_config_v10,
+ .awb_meas_enable = rkisp1_awb_meas_enable_v10,
+ .awb_gain_config = rkisp1_awb_gain_config_v10,
+ .aec_config = rkisp1_aec_config_v10,
+ .hst_config = rkisp1_hst_config_v10,
+ .hst_enable = rkisp1_hst_enable_v10,
+ .afm_config = rkisp1_afm_config_v10,
};
static int rkisp1_params_enum_fmt_meta_out(struct file *file, void *priv,
@@ -1472,7 +1472,7 @@ static void rkisp1_init_params(struct rkisp1_params *params)
params->vdev_fmt.fmt.meta.buffersize =
sizeof(struct rkisp1_params_cfg);
- params->ops = &rkisp1_params_ops;
+ params->ops = &rkisp1_v10_params_ops;
}
int rkisp1_params_register(struct rkisp1_device *rkisp1)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
index fa33080f51db..c71ccd148bde 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
@@ -212,6 +212,35 @@
/* CCL */
#define RKISP1_CIF_CCL_CIF_CLK_DIS BIT(2)
+/* VI_ISP_CLK_CTRL */
+#define RKISP1_CIF_CLK_CTRL_ISP_RAW BIT(0)
+#define RKISP1_CIF_CLK_CTRL_ISP_RGB BIT(1)
+#define RKISP1_CIF_CLK_CTRL_ISP_YUV BIT(2)
+#define RKISP1_CIF_CLK_CTRL_ISP_3A BIT(3)
+#define RKISP1_CIF_CLK_CTRL_MIPI_RAW BIT(4)
+#define RKISP1_CIF_CLK_CTRL_ISP_IE BIT(5)
+#define RKISP1_CIF_CLK_CTRL_RSZ_RAM BIT(6)
+#define RKISP1_CIF_CLK_CTRL_JPEG_RAM BIT(7)
+#define RKISP1_CIF_CLK_CTRL_ACLK_ISP BIT(8)
+#define RKISP1_CIF_CLK_CTRL_MI_IDC BIT(9)
+#define RKISP1_CIF_CLK_CTRL_MI_MP BIT(10)
+#define RKISP1_CIF_CLK_CTRL_MI_JPEG BIT(11)
+#define RKISP1_CIF_CLK_CTRL_MI_DP BIT(12)
+#define RKISP1_CIF_CLK_CTRL_MI_Y12 BIT(13)
+#define RKISP1_CIF_CLK_CTRL_MI_SP BIT(14)
+#define RKISP1_CIF_CLK_CTRL_MI_RAW0 BIT(15)
+#define RKISP1_CIF_CLK_CTRL_MI_RAW1 BIT(16)
+#define RKISP1_CIF_CLK_CTRL_MI_READ BIT(17)
+#define RKISP1_CIF_CLK_CTRL_MI_RAWRD BIT(18)
+#define RKISP1_CIF_CLK_CTRL_CP BIT(19)
+#define RKISP1_CIF_CLK_CTRL_IE BIT(20)
+#define RKISP1_CIF_CLK_CTRL_SI BIT(21)
+#define RKISP1_CIF_CLK_CTRL_RSZM BIT(22)
+#define RKISP1_CIF_CLK_CTRL_DPMUX BIT(23)
+#define RKISP1_CIF_CLK_CTRL_JPEG BIT(24)
+#define RKISP1_CIF_CLK_CTRL_RSZS BIT(25)
+#define RKISP1_CIF_CLK_CTRL_MIPI BIT(26)
+#define RKISP1_CIF_CLK_CTRL_MARVINMI BIT(27)
/* ICCL */
#define RKISP1_CIF_ICCL_ISP_CLK BIT(0)
#define RKISP1_CIF_ICCL_CP_CLK BIT(1)
@@ -346,26 +375,26 @@
#define RKISP1_CIF_SUPER_IMP_CTRL_TRANSP_DIS BIT(2)
/* ISP HISTOGRAM CALCULATION : ISP_HIST_PROP */
-#define RKISP1_CIF_ISP_HIST_PROP_MODE_DIS (0 << 0)
-#define RKISP1_CIF_ISP_HIST_PROP_MODE_RGB BIT(0)
-#define RKISP1_CIF_ISP_HIST_PROP_MODE_RED (2 << 0)
-#define RKISP1_CIF_ISP_HIST_PROP_MODE_GREEN (3 << 0)
-#define RKISP1_CIF_ISP_HIST_PROP_MODE_BLUE (4 << 0)
-#define RKISP1_CIF_ISP_HIST_PROP_MODE_LUM (5 << 0)
-#define RKISP1_CIF_ISP_HIST_PROP_MODE_MASK 0x7
-#define RKISP1_CIF_ISP_HIST_PREDIV_SET(x) (((x) & 0x7F) << 3)
-#define RKISP1_CIF_ISP_HIST_WEIGHT_SET(v0, v1, v2, v3) \
+#define RKISP1_CIF_ISP_HIST_PROP_MODE_DIS_V10 (0 << 0)
+#define RKISP1_CIF_ISP_HIST_PROP_MODE_RGB_V10 BIT(0)
+#define RKISP1_CIF_ISP_HIST_PROP_MODE_RED_V10 (2 << 0)
+#define RKISP1_CIF_ISP_HIST_PROP_MODE_GREEN_V10 (3 << 0)
+#define RKISP1_CIF_ISP_HIST_PROP_MODE_BLUE_V10 (4 << 0)
+#define RKISP1_CIF_ISP_HIST_PROP_MODE_LUM_V10 (5 << 0)
+#define RKISP1_CIF_ISP_HIST_PROP_MODE_MASK_V10 0x7
+#define RKISP1_CIF_ISP_HIST_PREDIV_SET_V10(x) (((x) & 0x7F) << 3)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_SET_V10(v0, v1, v2, v3) \
(((v0) & 0x1F) | (((v1) & 0x1F) << 8) |\
(((v2) & 0x1F) << 16) | \
(((v3) & 0x1F) << 24))
-#define RKISP1_CIF_ISP_HIST_WINDOW_OFFSET_RESERVED 0xFFFFF000
-#define RKISP1_CIF_ISP_HIST_WINDOW_SIZE_RESERVED 0xFFFFF800
-#define RKISP1_CIF_ISP_HIST_WEIGHT_RESERVED 0xE0E0E0E0
-#define RKISP1_CIF_ISP_MAX_HIST_PREDIVIDER 0x0000007F
-#define RKISP1_CIF_ISP_HIST_ROW_NUM 5
-#define RKISP1_CIF_ISP_HIST_COLUMN_NUM 5
-#define RKISP1_CIF_ISP_HIST_GET_BIN(x) ((x) & 0x000FFFFF)
+#define RKISP1_CIF_ISP_HIST_WINDOW_OFFSET_RESERVED_V10 0xFFFFF000
+#define RKISP1_CIF_ISP_HIST_WINDOW_SIZE_RESERVED_V10 0xFFFFF800
+#define RKISP1_CIF_ISP_HIST_WEIGHT_RESERVED_V10 0xE0E0E0E0
+#define RKISP1_CIF_ISP_MAX_HIST_PREDIVIDER_V10 0x0000007F
+#define RKISP1_CIF_ISP_HIST_ROW_NUM_V10 5
+#define RKISP1_CIF_ISP_HIST_COLUMN_NUM_V10 5
+#define RKISP1_CIF_ISP_HIST_GET_BIN_V10(x) ((x) & 0x000FFFFF)
/* AUTO FOCUS MEASUREMENT: ISP_AFM_CTRL */
#define RKISP1_ISP_AFM_CTRL_ENABLE BIT(0)
@@ -442,41 +471,41 @@
#define RKISP1_CIF_ISP_EXP_CTRL_MEASMODE_1 BIT(31)
/* ISP_EXP_H_SIZE */
-#define RKISP1_CIF_ISP_EXP_H_SIZE_SET(x) ((x) & 0x7FF)
-#define RKISP1_CIF_ISP_EXP_HEIGHT_MASK 0x000007FF
+#define RKISP1_CIF_ISP_EXP_H_SIZE_SET_V10(x) ((x) & 0x7FF)
+#define RKISP1_CIF_ISP_EXP_HEIGHT_MASK_V10 0x000007FF
/* ISP_EXP_V_SIZE : vertical size must be a multiple of 2). */
-#define RKISP1_CIF_ISP_EXP_V_SIZE_SET(x) ((x) & 0x7FE)
+#define RKISP1_CIF_ISP_EXP_V_SIZE_SET_V10(x) ((x) & 0x7FE)
/* ISP_EXP_H_OFFSET */
-#define RKISP1_CIF_ISP_EXP_H_OFFSET_SET(x) ((x) & 0x1FFF)
-#define RKISP1_CIF_ISP_EXP_MAX_HOFFS 2424
+#define RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V10(x) ((x) & 0x1FFF)
+#define RKISP1_CIF_ISP_EXP_MAX_HOFFS_V10 2424
/* ISP_EXP_V_OFFSET */
-#define RKISP1_CIF_ISP_EXP_V_OFFSET_SET(x) ((x) & 0x1FFF)
-#define RKISP1_CIF_ISP_EXP_MAX_VOFFS 1806
-
-#define RKISP1_CIF_ISP_EXP_ROW_NUM 5
-#define RKISP1_CIF_ISP_EXP_COLUMN_NUM 5
-#define RKISP1_CIF_ISP_EXP_NUM_LUMA_REGS \
- (RKISP1_CIF_ISP_EXP_ROW_NUM * RKISP1_CIF_ISP_EXP_COLUMN_NUM)
-#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE 516
-#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE 35
-#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE 390
-#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE 28
-#define RKISP1_CIF_ISP_EXP_MAX_HSIZE \
- (RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE * RKISP1_CIF_ISP_EXP_COLUMN_NUM + 1)
-#define RKISP1_CIF_ISP_EXP_MIN_HSIZE \
- (RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE * RKISP1_CIF_ISP_EXP_COLUMN_NUM + 1)
-#define RKISP1_CIF_ISP_EXP_MAX_VSIZE \
- (RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE * RKISP1_CIF_ISP_EXP_ROW_NUM + 1)
-#define RKISP1_CIF_ISP_EXP_MIN_VSIZE \
- (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE * RKISP1_CIF_ISP_EXP_ROW_NUM + 1)
+#define RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V10(x) ((x) & 0x1FFF)
+#define RKISP1_CIF_ISP_EXP_MAX_VOFFS_V10 1806
+
+#define RKISP1_CIF_ISP_EXP_ROW_NUM_V10 5
+#define RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 5
+#define RKISP1_CIF_ISP_EXP_NUM_LUMA_REGS_V10 \
+ (RKISP1_CIF_ISP_EXP_ROW_NUM_V10 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10)
+#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V10 516
+#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V10 35
+#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V10 390
+#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V10 28
+#define RKISP1_CIF_ISP_EXP_MAX_HSIZE_V10 \
+ (RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V10 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 + 1)
+#define RKISP1_CIF_ISP_EXP_MIN_HSIZE_V10 \
+ (RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V10 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 + 1)
+#define RKISP1_CIF_ISP_EXP_MAX_VSIZE_V10 \
+ (RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V10 * RKISP1_CIF_ISP_EXP_ROW_NUM_V10 + 1)
+#define RKISP1_CIF_ISP_EXP_MIN_VSIZE_V10 \
+ (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V10 * RKISP1_CIF_ISP_EXP_ROW_NUM_V10 + 1)
/* LSC: ISP_LSC_CTRL */
#define RKISP1_CIF_ISP_LSC_CTRL_ENA BIT(0)
#define RKISP1_CIF_ISP_LSC_SECT_SIZE_RESERVED 0xFC00FC00
-#define RKISP1_CIF_ISP_LSC_GRAD_RESERVED 0xF000F000
-#define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED 0xF000F000
-#define RKISP1_CIF_ISP_LSC_TABLE_DATA(v0, v1) \
+#define RKISP1_CIF_ISP_LSC_GRAD_RESERVED_V10 0xF000F000
+#define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED_V10 0xF000F000
+#define RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(v0, v1) \
(((v0) & 0xFFF) | (((v1) & 0xFFF) << 12))
#define RKISP1_CIF_ISP_LSC_SECT_SIZE(v0, v1) \
(((v0) & 0xFFF) | (((v1) & 0xFFF) << 16))
@@ -667,18 +696,18 @@
#define RKISP1_CIF_ISP_GAMMA_B_Y14 (RKISP1_CIF_ISP_BASE + 0x000000E4)
#define RKISP1_CIF_ISP_GAMMA_B_Y15 (RKISP1_CIF_ISP_BASE + 0x000000E8)
#define RKISP1_CIF_ISP_GAMMA_B_Y16 (RKISP1_CIF_ISP_BASE + 0x000000EC)
-#define RKISP1_CIF_ISP_AWB_PROP (RKISP1_CIF_ISP_BASE + 0x00000110)
-#define RKISP1_CIF_ISP_AWB_WND_H_OFFS (RKISP1_CIF_ISP_BASE + 0x00000114)
-#define RKISP1_CIF_ISP_AWB_WND_V_OFFS (RKISP1_CIF_ISP_BASE + 0x00000118)
-#define RKISP1_CIF_ISP_AWB_WND_H_SIZE (RKISP1_CIF_ISP_BASE + 0x0000011C)
-#define RKISP1_CIF_ISP_AWB_WND_V_SIZE (RKISP1_CIF_ISP_BASE + 0x00000120)
-#define RKISP1_CIF_ISP_AWB_FRAMES (RKISP1_CIF_ISP_BASE + 0x00000124)
-#define RKISP1_CIF_ISP_AWB_REF (RKISP1_CIF_ISP_BASE + 0x00000128)
-#define RKISP1_CIF_ISP_AWB_THRESH (RKISP1_CIF_ISP_BASE + 0x0000012C)
-#define RKISP1_CIF_ISP_AWB_GAIN_G (RKISP1_CIF_ISP_BASE + 0x00000138)
-#define RKISP1_CIF_ISP_AWB_GAIN_RB (RKISP1_CIF_ISP_BASE + 0x0000013C)
-#define RKISP1_CIF_ISP_AWB_WHITE_CNT (RKISP1_CIF_ISP_BASE + 0x00000140)
-#define RKISP1_CIF_ISP_AWB_MEAN (RKISP1_CIF_ISP_BASE + 0x00000144)
+#define RKISP1_CIF_ISP_AWB_PROP_V10 (RKISP1_CIF_ISP_BASE + 0x00000110)
+#define RKISP1_CIF_ISP_AWB_WND_H_OFFS_V10 (RKISP1_CIF_ISP_BASE + 0x00000114)
+#define RKISP1_CIF_ISP_AWB_WND_V_OFFS_V10 (RKISP1_CIF_ISP_BASE + 0x00000118)
+#define RKISP1_CIF_ISP_AWB_WND_H_SIZE_V10 (RKISP1_CIF_ISP_BASE + 0x0000011C)
+#define RKISP1_CIF_ISP_AWB_WND_V_SIZE_V10 (RKISP1_CIF_ISP_BASE + 0x00000120)
+#define RKISP1_CIF_ISP_AWB_FRAMES_V10 (RKISP1_CIF_ISP_BASE + 0x00000124)
+#define RKISP1_CIF_ISP_AWB_REF_V10 (RKISP1_CIF_ISP_BASE + 0x00000128)
+#define RKISP1_CIF_ISP_AWB_THRESH_V10 (RKISP1_CIF_ISP_BASE + 0x0000012C)
+#define RKISP1_CIF_ISP_AWB_GAIN_G_V10 (RKISP1_CIF_ISP_BASE + 0x00000138)
+#define RKISP1_CIF_ISP_AWB_GAIN_RB_V10 (RKISP1_CIF_ISP_BASE + 0x0000013C)
+#define RKISP1_CIF_ISP_AWB_WHITE_CNT_V10 (RKISP1_CIF_ISP_BASE + 0x00000140)
+#define RKISP1_CIF_ISP_AWB_MEAN_V10 (RKISP1_CIF_ISP_BASE + 0x00000144)
#define RKISP1_CIF_ISP_CC_COEFF_0 (RKISP1_CIF_ISP_BASE + 0x00000170)
#define RKISP1_CIF_ISP_CC_COEFF_1 (RKISP1_CIF_ISP_BASE + 0x00000174)
#define RKISP1_CIF_ISP_CC_COEFF_2 (RKISP1_CIF_ISP_BASE + 0x00000178)
@@ -712,24 +741,24 @@
#define RKISP1_CIF_ISP_CT_COEFF_6 (RKISP1_CIF_ISP_BASE + 0x000001E8)
#define RKISP1_CIF_ISP_CT_COEFF_7 (RKISP1_CIF_ISP_BASE + 0x000001EC)
#define RKISP1_CIF_ISP_CT_COEFF_8 (RKISP1_CIF_ISP_BASE + 0x000001F0)
-#define RKISP1_CIF_ISP_GAMMA_OUT_MODE (RKISP1_CIF_ISP_BASE + 0x000001F4)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_0 (RKISP1_CIF_ISP_BASE + 0x000001F8)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_1 (RKISP1_CIF_ISP_BASE + 0x000001FC)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_2 (RKISP1_CIF_ISP_BASE + 0x00000200)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_3 (RKISP1_CIF_ISP_BASE + 0x00000204)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_4 (RKISP1_CIF_ISP_BASE + 0x00000208)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_5 (RKISP1_CIF_ISP_BASE + 0x0000020C)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_6 (RKISP1_CIF_ISP_BASE + 0x00000210)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_7 (RKISP1_CIF_ISP_BASE + 0x00000214)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_8 (RKISP1_CIF_ISP_BASE + 0x00000218)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_9 (RKISP1_CIF_ISP_BASE + 0x0000021C)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_10 (RKISP1_CIF_ISP_BASE + 0x00000220)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_11 (RKISP1_CIF_ISP_BASE + 0x00000224)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_12 (RKISP1_CIF_ISP_BASE + 0x00000228)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_13 (RKISP1_CIF_ISP_BASE + 0x0000022C)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_14 (RKISP1_CIF_ISP_BASE + 0x00000230)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_15 (RKISP1_CIF_ISP_BASE + 0x00000234)
-#define RKISP1_CIF_ISP_GAMMA_OUT_Y_16 (RKISP1_CIF_ISP_BASE + 0x00000238)
+#define RKISP1_CIF_ISP_GAMMA_OUT_MODE_V10 (RKISP1_CIF_ISP_BASE + 0x000001F4)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V10 (RKISP1_CIF_ISP_BASE + 0x000001F8)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_1_V10 (RKISP1_CIF_ISP_BASE + 0x000001FC)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_2_V10 (RKISP1_CIF_ISP_BASE + 0x00000200)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_3_V10 (RKISP1_CIF_ISP_BASE + 0x00000204)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_4_V10 (RKISP1_CIF_ISP_BASE + 0x00000208)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_5_V10 (RKISP1_CIF_ISP_BASE + 0x0000020C)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_6_V10 (RKISP1_CIF_ISP_BASE + 0x00000210)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_7_V10 (RKISP1_CIF_ISP_BASE + 0x00000214)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_8_V10 (RKISP1_CIF_ISP_BASE + 0x00000218)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_9_V10 (RKISP1_CIF_ISP_BASE + 0x0000021C)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_10_V10 (RKISP1_CIF_ISP_BASE + 0x00000220)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_11_V10 (RKISP1_CIF_ISP_BASE + 0x00000224)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_12_V10 (RKISP1_CIF_ISP_BASE + 0x00000228)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_13_V10 (RKISP1_CIF_ISP_BASE + 0x0000022C)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_14_V10 (RKISP1_CIF_ISP_BASE + 0x00000230)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_15_V10 (RKISP1_CIF_ISP_BASE + 0x00000234)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_16_V10 (RKISP1_CIF_ISP_BASE + 0x00000238)
#define RKISP1_CIF_ISP_ERR (RKISP1_CIF_ISP_BASE + 0x0000023C)
#define RKISP1_CIF_ISP_ERR_CLR (RKISP1_CIF_ISP_BASE + 0x00000240)
#define RKISP1_CIF_ISP_FRAME_COUNT (RKISP1_CIF_ISP_BASE + 0x00000244)
@@ -1005,36 +1034,35 @@
#define RKISP1_CIF_ISP_IS_H_SIZE_SHD (RKISP1_CIF_ISP_IS_BASE + 0x0000002C)
#define RKISP1_CIF_ISP_IS_V_SIZE_SHD (RKISP1_CIF_ISP_IS_BASE + 0x00000030)
-#define RKISP1_CIF_ISP_HIST_BASE 0x00002400
-
-#define RKISP1_CIF_ISP_HIST_PROP (RKISP1_CIF_ISP_HIST_BASE + 0x00000000)
-#define RKISP1_CIF_ISP_HIST_H_OFFS (RKISP1_CIF_ISP_HIST_BASE + 0x00000004)
-#define RKISP1_CIF_ISP_HIST_V_OFFS (RKISP1_CIF_ISP_HIST_BASE + 0x00000008)
-#define RKISP1_CIF_ISP_HIST_H_SIZE (RKISP1_CIF_ISP_HIST_BASE + 0x0000000C)
-#define RKISP1_CIF_ISP_HIST_V_SIZE (RKISP1_CIF_ISP_HIST_BASE + 0x00000010)
-#define RKISP1_CIF_ISP_HIST_BIN_0 (RKISP1_CIF_ISP_HIST_BASE + 0x00000014)
-#define RKISP1_CIF_ISP_HIST_BIN_1 (RKISP1_CIF_ISP_HIST_BASE + 0x00000018)
-#define RKISP1_CIF_ISP_HIST_BIN_2 (RKISP1_CIF_ISP_HIST_BASE + 0x0000001C)
-#define RKISP1_CIF_ISP_HIST_BIN_3 (RKISP1_CIF_ISP_HIST_BASE + 0x00000020)
-#define RKISP1_CIF_ISP_HIST_BIN_4 (RKISP1_CIF_ISP_HIST_BASE + 0x00000024)
-#define RKISP1_CIF_ISP_HIST_BIN_5 (RKISP1_CIF_ISP_HIST_BASE + 0x00000028)
-#define RKISP1_CIF_ISP_HIST_BIN_6 (RKISP1_CIF_ISP_HIST_BASE + 0x0000002C)
-#define RKISP1_CIF_ISP_HIST_BIN_7 (RKISP1_CIF_ISP_HIST_BASE + 0x00000030)
-#define RKISP1_CIF_ISP_HIST_BIN_8 (RKISP1_CIF_ISP_HIST_BASE + 0x00000034)
-#define RKISP1_CIF_ISP_HIST_BIN_9 (RKISP1_CIF_ISP_HIST_BASE + 0x00000038)
-#define RKISP1_CIF_ISP_HIST_BIN_10 (RKISP1_CIF_ISP_HIST_BASE + 0x0000003C)
-#define RKISP1_CIF_ISP_HIST_BIN_11 (RKISP1_CIF_ISP_HIST_BASE + 0x00000040)
-#define RKISP1_CIF_ISP_HIST_BIN_12 (RKISP1_CIF_ISP_HIST_BASE + 0x00000044)
-#define RKISP1_CIF_ISP_HIST_BIN_13 (RKISP1_CIF_ISP_HIST_BASE + 0x00000048)
-#define RKISP1_CIF_ISP_HIST_BIN_14 (RKISP1_CIF_ISP_HIST_BASE + 0x0000004C)
-#define RKISP1_CIF_ISP_HIST_BIN_15 (RKISP1_CIF_ISP_HIST_BASE + 0x00000050)
-#define RKISP1_CIF_ISP_HIST_WEIGHT_00TO30 (RKISP1_CIF_ISP_HIST_BASE + 0x00000054)
-#define RKISP1_CIF_ISP_HIST_WEIGHT_40TO21 (RKISP1_CIF_ISP_HIST_BASE + 0x00000058)
-#define RKISP1_CIF_ISP_HIST_WEIGHT_31TO12 (RKISP1_CIF_ISP_HIST_BASE + 0x0000005C)
-#define RKISP1_CIF_ISP_HIST_WEIGHT_22TO03 (RKISP1_CIF_ISP_HIST_BASE + 0x00000060)
-#define RKISP1_CIF_ISP_HIST_WEIGHT_13TO43 (RKISP1_CIF_ISP_HIST_BASE + 0x00000064)
-#define RKISP1_CIF_ISP_HIST_WEIGHT_04TO34 (RKISP1_CIF_ISP_HIST_BASE + 0x00000068)
-#define RKISP1_CIF_ISP_HIST_WEIGHT_44 (RKISP1_CIF_ISP_HIST_BASE + 0x0000006C)
+#define RKISP1_CIF_ISP_HIST_BASE_V10 0x00002400
+#define RKISP1_CIF_ISP_HIST_PROP_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000000)
+#define RKISP1_CIF_ISP_HIST_H_OFFS_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000004)
+#define RKISP1_CIF_ISP_HIST_V_OFFS_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000008)
+#define RKISP1_CIF_ISP_HIST_H_SIZE_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000000C)
+#define RKISP1_CIF_ISP_HIST_V_SIZE_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000010)
+#define RKISP1_CIF_ISP_HIST_BIN_0_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000014)
+#define RKISP1_CIF_ISP_HIST_BIN_1_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000018)
+#define RKISP1_CIF_ISP_HIST_BIN_2_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000001C)
+#define RKISP1_CIF_ISP_HIST_BIN_3_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000020)
+#define RKISP1_CIF_ISP_HIST_BIN_4_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000024)
+#define RKISP1_CIF_ISP_HIST_BIN_5_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000028)
+#define RKISP1_CIF_ISP_HIST_BIN_6_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000002C)
+#define RKISP1_CIF_ISP_HIST_BIN_7_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000030)
+#define RKISP1_CIF_ISP_HIST_BIN_8_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000034)
+#define RKISP1_CIF_ISP_HIST_BIN_9_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000038)
+#define RKISP1_CIF_ISP_HIST_BIN_10_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000003C)
+#define RKISP1_CIF_ISP_HIST_BIN_11_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000040)
+#define RKISP1_CIF_ISP_HIST_BIN_12_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000044)
+#define RKISP1_CIF_ISP_HIST_BIN_13_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000048)
+#define RKISP1_CIF_ISP_HIST_BIN_14_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000004C)
+#define RKISP1_CIF_ISP_HIST_BIN_15_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000050)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_00TO30_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000054)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_40TO21_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000058)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_31TO12_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000005C)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_22TO03_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000060)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_13TO43_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000064)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_04TO34_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000068)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_44_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000006C)
#define RKISP1_CIF_ISP_FILT_BASE 0x00002500
#define RKISP1_CIF_ISP_FILT_MODE (RKISP1_CIF_ISP_FILT_BASE + 0x00000000)
@@ -1060,35 +1088,35 @@
#define RKISP1_CIF_ISP_EXP_BASE 0x00002600
#define RKISP1_CIF_ISP_EXP_CTRL (RKISP1_CIF_ISP_EXP_BASE + 0x00000000)
-#define RKISP1_CIF_ISP_EXP_H_OFFSET (RKISP1_CIF_ISP_EXP_BASE + 0x00000004)
-#define RKISP1_CIF_ISP_EXP_V_OFFSET (RKISP1_CIF_ISP_EXP_BASE + 0x00000008)
-#define RKISP1_CIF_ISP_EXP_H_SIZE (RKISP1_CIF_ISP_EXP_BASE + 0x0000000C)
-#define RKISP1_CIF_ISP_EXP_V_SIZE (RKISP1_CIF_ISP_EXP_BASE + 0x00000010)
-#define RKISP1_CIF_ISP_EXP_MEAN_00 (RKISP1_CIF_ISP_EXP_BASE + 0x00000014)
-#define RKISP1_CIF_ISP_EXP_MEAN_10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000018)
-#define RKISP1_CIF_ISP_EXP_MEAN_20 (RKISP1_CIF_ISP_EXP_BASE + 0x0000001c)
-#define RKISP1_CIF_ISP_EXP_MEAN_30 (RKISP1_CIF_ISP_EXP_BASE + 0x00000020)
-#define RKISP1_CIF_ISP_EXP_MEAN_40 (RKISP1_CIF_ISP_EXP_BASE + 0x00000024)
-#define RKISP1_CIF_ISP_EXP_MEAN_01 (RKISP1_CIF_ISP_EXP_BASE + 0x00000028)
-#define RKISP1_CIF_ISP_EXP_MEAN_11 (RKISP1_CIF_ISP_EXP_BASE + 0x0000002c)
-#define RKISP1_CIF_ISP_EXP_MEAN_21 (RKISP1_CIF_ISP_EXP_BASE + 0x00000030)
-#define RKISP1_CIF_ISP_EXP_MEAN_31 (RKISP1_CIF_ISP_EXP_BASE + 0x00000034)
-#define RKISP1_CIF_ISP_EXP_MEAN_41 (RKISP1_CIF_ISP_EXP_BASE + 0x00000038)
-#define RKISP1_CIF_ISP_EXP_MEAN_02 (RKISP1_CIF_ISP_EXP_BASE + 0x0000003c)
-#define RKISP1_CIF_ISP_EXP_MEAN_12 (RKISP1_CIF_ISP_EXP_BASE + 0x00000040)
-#define RKISP1_CIF_ISP_EXP_MEAN_22 (RKISP1_CIF_ISP_EXP_BASE + 0x00000044)
-#define RKISP1_CIF_ISP_EXP_MEAN_32 (RKISP1_CIF_ISP_EXP_BASE + 0x00000048)
-#define RKISP1_CIF_ISP_EXP_MEAN_42 (RKISP1_CIF_ISP_EXP_BASE + 0x0000004c)
-#define RKISP1_CIF_ISP_EXP_MEAN_03 (RKISP1_CIF_ISP_EXP_BASE + 0x00000050)
-#define RKISP1_CIF_ISP_EXP_MEAN_13 (RKISP1_CIF_ISP_EXP_BASE + 0x00000054)
-#define RKISP1_CIF_ISP_EXP_MEAN_23 (RKISP1_CIF_ISP_EXP_BASE + 0x00000058)
-#define RKISP1_CIF_ISP_EXP_MEAN_33 (RKISP1_CIF_ISP_EXP_BASE + 0x0000005c)
-#define RKISP1_CIF_ISP_EXP_MEAN_43 (RKISP1_CIF_ISP_EXP_BASE + 0x00000060)
-#define RKISP1_CIF_ISP_EXP_MEAN_04 (RKISP1_CIF_ISP_EXP_BASE + 0x00000064)
-#define RKISP1_CIF_ISP_EXP_MEAN_14 (RKISP1_CIF_ISP_EXP_BASE + 0x00000068)
-#define RKISP1_CIF_ISP_EXP_MEAN_24 (RKISP1_CIF_ISP_EXP_BASE + 0x0000006c)
-#define RKISP1_CIF_ISP_EXP_MEAN_34 (RKISP1_CIF_ISP_EXP_BASE + 0x00000070)
-#define RKISP1_CIF_ISP_EXP_MEAN_44 (RKISP1_CIF_ISP_EXP_BASE + 0x00000074)
+#define RKISP1_CIF_ISP_EXP_H_OFFSET_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000004)
+#define RKISP1_CIF_ISP_EXP_V_OFFSET_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000008)
+#define RKISP1_CIF_ISP_EXP_H_SIZE_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000000C)
+#define RKISP1_CIF_ISP_EXP_V_SIZE_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000010)
+#define RKISP1_CIF_ISP_EXP_MEAN_00_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000014)
+#define RKISP1_CIF_ISP_EXP_MEAN_10_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000018)
+#define RKISP1_CIF_ISP_EXP_MEAN_20_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000001c)
+#define RKISP1_CIF_ISP_EXP_MEAN_30_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000020)
+#define RKISP1_CIF_ISP_EXP_MEAN_40_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000024)
+#define RKISP1_CIF_ISP_EXP_MEAN_01_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000028)
+#define RKISP1_CIF_ISP_EXP_MEAN_11_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000002c)
+#define RKISP1_CIF_ISP_EXP_MEAN_21_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000030)
+#define RKISP1_CIF_ISP_EXP_MEAN_31_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000034)
+#define RKISP1_CIF_ISP_EXP_MEAN_41_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000038)
+#define RKISP1_CIF_ISP_EXP_MEAN_02_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000003c)
+#define RKISP1_CIF_ISP_EXP_MEAN_12_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000040)
+#define RKISP1_CIF_ISP_EXP_MEAN_22_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000044)
+#define RKISP1_CIF_ISP_EXP_MEAN_32_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000048)
+#define RKISP1_CIF_ISP_EXP_MEAN_42_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000004c)
+#define RKISP1_CIF_ISP_EXP_MEAN_03_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000050)
+#define RKISP1_CIF_ISP_EXP_MEAN_13_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000054)
+#define RKISP1_CIF_ISP_EXP_MEAN_23_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000058)
+#define RKISP1_CIF_ISP_EXP_MEAN_33_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000005c)
+#define RKISP1_CIF_ISP_EXP_MEAN_43_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000060)
+#define RKISP1_CIF_ISP_EXP_MEAN_04_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000064)
+#define RKISP1_CIF_ISP_EXP_MEAN_14_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000068)
+#define RKISP1_CIF_ISP_EXP_MEAN_24_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000006c)
+#define RKISP1_CIF_ISP_EXP_MEAN_34_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000070)
+#define RKISP1_CIF_ISP_EXP_MEAN_44_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000074)
#define RKISP1_CIF_ISP_BLS_BASE 0x00002700
#define RKISP1_CIF_ISP_BLS_CTRL (RKISP1_CIF_ISP_BLS_BASE + 0x00000000)
@@ -1260,4 +1288,7 @@
#define RKISP1_CIF_ISP_VSM_DELTA_H (RKISP1_CIF_ISP_VSM_BASE + 0x0000001C)
#define RKISP1_CIF_ISP_VSM_DELTA_V (RKISP1_CIF_ISP_VSM_BASE + 0x00000020)
+#define RKISP1_CIF_ISP_CSI0_BASE 0x00007000
+#define RKISP1_CIF_ISP_CSI0_CTRL0 (RKISP1_CIF_ISP_CSI0_BASE + 0x00000000)
+
#endif /* _RKISP1_REGS_H */
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
index f68a5e78e54a..3f286c55ad60 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
@@ -175,18 +175,18 @@ rkisp1_stats_init_vb2_queue(struct vb2_queue *q, struct rkisp1_stats *stats)
return vb2_queue_init(q);
}
-static void rkisp1_stats_get_awb_meas(struct rkisp1_stats *stats,
- struct rkisp1_stat_buffer *pbuf)
+static void rkisp1_stats_get_awb_meas_v10(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf)
{
/* Protect against concurrent access from ISR? */
struct rkisp1_device *rkisp1 = stats->rkisp1;
u32 reg_val;
pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AWB;
- reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_WHITE_CNT);
+ reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_WHITE_CNT_V10);
pbuf->params.awb.awb_mean[0].cnt =
RKISP1_CIF_ISP_AWB_GET_PIXEL_CNT(reg_val);
- reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_MEAN);
+ reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_MEAN_V10);
pbuf->params.awb.awb_mean[0].mean_cr_or_r =
RKISP1_CIF_ISP_AWB_GET_MEAN_CR_R(reg_val);
@@ -196,8 +196,8 @@ static void rkisp1_stats_get_awb_meas(struct rkisp1_stats *stats,
RKISP1_CIF_ISP_AWB_GET_MEAN_Y_G(reg_val);
}
-static void rkisp1_stats_get_aec_meas(struct rkisp1_stats *stats,
- struct rkisp1_stat_buffer *pbuf)
+static void rkisp1_stats_get_aec_meas_v10(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf)
{
struct rkisp1_device *rkisp1 = stats->rkisp1;
unsigned int i;
@@ -206,7 +206,7 @@ static void rkisp1_stats_get_aec_meas(struct rkisp1_stats *stats,
for (i = 0; i < RKISP1_CIF_ISP_AE_MEAN_MAX_V10; i++)
pbuf->params.ae.exp_mean[i] =
(u8)rkisp1_read(rkisp1,
- RKISP1_CIF_ISP_EXP_MEAN_00 + i * 4);
+ RKISP1_CIF_ISP_EXP_MEAN_00_V10 + i * 4);
}
static void rkisp1_stats_get_afc_meas(struct rkisp1_stats *stats,
@@ -226,17 +226,17 @@ static void rkisp1_stats_get_afc_meas(struct rkisp1_stats *stats,
af->window[2].lum = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AFM_LUM_C);
}
-static void rkisp1_stats_get_hst_meas(struct rkisp1_stats *stats,
- struct rkisp1_stat_buffer *pbuf)
+static void rkisp1_stats_get_hst_meas_v10(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf)
{
struct rkisp1_device *rkisp1 = stats->rkisp1;
unsigned int i;
pbuf->meas_type |= RKISP1_CIF_ISP_STAT_HIST;
for (i = 0; i < RKISP1_CIF_ISP_HIST_BIN_N_MAX_V10; i++) {
- u32 reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_HIST_BIN_0 + i * 4);
+ u32 reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_HIST_BIN_0_V10 + i * 4);
- pbuf->params.hist.hist_bins[i] = RKISP1_CIF_ISP_HIST_GET_BIN(reg_val);
+ pbuf->params.hist.hist_bins[i] = RKISP1_CIF_ISP_HIST_GET_BIN_V10(reg_val);
}
}
@@ -287,10 +287,10 @@ static void rkisp1_stats_get_bls_meas(struct rkisp1_stats *stats,
}
}
-static struct rkisp1_stats_ops rkisp1_stats_ops = {
- .get_awb_meas = rkisp1_stats_get_awb_meas,
- .get_aec_meas = rkisp1_stats_get_aec_meas,
- .get_hst_meas = rkisp1_stats_get_hst_meas,
+static struct rkisp1_stats_ops rkisp1_v10_stats_ops = {
+ .get_awb_meas = rkisp1_stats_get_awb_meas_v10,
+ .get_aec_meas = rkisp1_stats_get_aec_meas_v10,
+ .get_hst_meas = rkisp1_stats_get_hst_meas_v10,
};
static void
@@ -361,7 +361,7 @@ static void rkisp1_init_stats(struct rkisp1_stats *stats)
stats->vdev_fmt.fmt.meta.buffersize =
sizeof(struct rkisp1_stat_buffer);
- stats->ops = &rkisp1_stats_ops;
+ stats->ops = &rkisp1_v10_stats_ops;
}
int rkisp1_stats_register(struct rkisp1_device *rkisp1)
--
2.29.2
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v2 6/7] media: rockchip: rkisp1: add support for v12 isp variants
2021-06-15 0:37 ` Heiko Stuebner
@ 2021-06-15 0:37 ` Heiko Stuebner
-1 siblings, 0 replies; 38+ messages in thread
From: Heiko Stuebner @ 2021-06-15 0:37 UTC (permalink / raw)
To: mchehab, hverkuil-cisco
Cc: ezequiel, dafna.hirschfeld, helen.koike, Laurent.pinchart,
linux-rockchip, linux-media, heiko, Heiko Stuebner
From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
The rkisp1 evolved over soc generations and the rk3326/px30 introduced
the so called v12 - probably meaning v1.2.
Add the new register definitions.
Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
---
.../platform/rockchip/rkisp1/rkisp1-isp.c | 13 +
.../platform/rockchip/rkisp1/rkisp1-params.c | 338 +++++++++++++++++-
.../platform/rockchip/rkisp1/rkisp1-regs.h | 111 ++++++
.../platform/rockchip/rkisp1/rkisp1-stats.c | 73 +++-
4 files changed, 533 insertions(+), 2 deletions(-)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
index 1de98e688008..36829e3bdda0 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
@@ -408,6 +408,10 @@ static int rkisp1_config_mipi(struct rkisp1_device *rkisp1)
rkisp1_write(rkisp1, mipi_ctrl, RKISP1_CIF_MIPI_CTRL);
+ /* V12 could also use a newer csi2-host, but we don't want that yet */
+ if (rkisp1->media_dev.hw_revision == RKISP1_V12)
+ rkisp1_write(rkisp1, 0, RKISP1_CIF_ISP_CSI0_CTRL0);
+
/* Configure Data Type and Virtual Channel */
rkisp1_write(rkisp1,
RKISP1_CIF_MIPI_DATA_SEL_DT(sink_fmt->mipi_dt) |
@@ -527,6 +531,15 @@ static void rkisp1_config_clk(struct rkisp1_device *rkisp1)
RKISP1_CIF_ICCL_DCROP_CLK;
rkisp1_write(rkisp1, val, RKISP1_CIF_ICCL);
+
+ /* ensure sp and mp can run at the same time in V12 */
+ if (rkisp1->media_dev.hw_revision == RKISP1_V12) {
+ val = RKISP1_CIF_CLK_CTRL_MI_Y12 | RKISP1_CIF_CLK_CTRL_MI_SP |
+ RKISP1_CIF_CLK_CTRL_MI_RAW0 | RKISP1_CIF_CLK_CTRL_MI_RAW1 |
+ RKISP1_CIF_CLK_CTRL_MI_READ | RKISP1_CIF_CLK_CTRL_MI_RAWRD |
+ RKISP1_CIF_CLK_CTRL_CP | RKISP1_CIF_CLK_CTRL_IE;
+ rkisp1_write(rkisp1, val, RKISP1_CIF_VI_ISP_CLK_CTRL_V12);
+ }
}
static void rkisp1_isp_start(struct rkisp1_device *rkisp1)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
index 427c7cc400b2..0d2b77dd11f5 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
@@ -255,6 +255,78 @@ rkisp1_lsc_matrix_config_v10(struct rkisp1_params *params,
RKISP1_CIF_ISP_LSC_TABLE_SEL);
}
+static void
+rkisp1_lsc_matrix_config_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_lsc_config *pconfig)
+{
+ unsigned int isp_lsc_status, sram_addr, isp_lsc_table_sel, i, j, data;
+
+ isp_lsc_status = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_LSC_STATUS);
+
+ /* RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_153 = ( 17 * 18 ) >> 1 */
+ sram_addr = (isp_lsc_status & RKISP1_CIF_ISP_LSC_ACTIVE_TABLE) ?
+ RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_0 :
+ RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_153;
+ rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_R_TABLE_ADDR);
+ rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_GR_TABLE_ADDR);
+ rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_GB_TABLE_ADDR);
+ rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_B_TABLE_ADDR);
+
+ /* program data tables (table size is 9 * 17 = 153) */
+ for (i = 0; i < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; i++) {
+ /*
+ * 17 sectors with 2 values in one DWORD = 9
+ * DWORDs (2nd value of last DWORD unused)
+ */
+ for (j = 0; j < RKISP1_CIF_ISP_LSC_SAMPLES_MAX - 1; j += 2) {
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
+ pconfig->r_data_tbl[i][j],
+ pconfig->r_data_tbl[i][j + 1]);
+ rkisp1_write(params->rkisp1, data,
+ RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
+
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
+ pconfig->gr_data_tbl[i][j],
+ pconfig->gr_data_tbl[i][j + 1]);
+ rkisp1_write(params->rkisp1, data,
+ RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
+
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
+ pconfig->gb_data_tbl[i][j],
+ pconfig->gb_data_tbl[i][j + 1]);
+ rkisp1_write(params->rkisp1, data,
+ RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
+
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
+ pconfig->b_data_tbl[i][j],
+ pconfig->b_data_tbl[i][j + 1]);
+ rkisp1_write(params->rkisp1, data,
+ RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
+ }
+
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->r_data_tbl[i][j], 0);
+ rkisp1_write(params->rkisp1, data,
+ RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
+
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->gr_data_tbl[i][j], 0);
+ rkisp1_write(params->rkisp1, data,
+ RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
+
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->gb_data_tbl[i][j], 0);
+ rkisp1_write(params->rkisp1, data,
+ RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
+
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->b_data_tbl[i][j], 0);
+ rkisp1_write(params->rkisp1, data,
+ RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
+ }
+ isp_lsc_table_sel = (isp_lsc_status & RKISP1_CIF_ISP_LSC_ACTIVE_TABLE) ?
+ RKISP1_CIF_ISP_LSC_TABLE_0 :
+ RKISP1_CIF_ISP_LSC_TABLE_1;
+ rkisp1_write(params->rkisp1, isp_lsc_table_sel,
+ RKISP1_CIF_ISP_LSC_TABLE_SEL);
+}
+
static void rkisp1_lsc_config(struct rkisp1_params *params,
const struct rkisp1_cif_isp_lsc_config *arg)
{
@@ -396,6 +468,25 @@ static void rkisp1_goc_config_v10(struct rkisp1_params *params,
RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V10 + i * 4);
}
+static void rkisp1_goc_config_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_goc_config *arg)
+{
+ unsigned int i;
+ u32 value;
+
+ rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
+ RKISP1_CIF_ISP_CTRL_ISP_GAMMA_OUT_ENA);
+ rkisp1_write(params->rkisp1, arg->mode, RKISP1_CIF_ISP_GAMMA_OUT_MODE_V12);
+
+ for (i = 0; i < RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V12 / 2; i++) {
+ value = RKISP1_CIF_ISP_GAMMA_VALUE_V12(
+ arg->gamma_y[2 * i + 1],
+ arg->gamma_y[2 * i]);
+ rkisp1_write(params->rkisp1, value,
+ RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V12 + i * 4);
+ }
+}
+
/* ISP Cross Talk */
static void rkisp1_ctk_config(struct rkisp1_params *params,
const struct rkisp1_cif_isp_ctk_config *arg)
@@ -473,6 +564,45 @@ static void rkisp1_awb_meas_config_v10(struct rkisp1_params *params,
arg->frames, RKISP1_CIF_ISP_AWB_FRAMES_V10);
}
+static void rkisp1_awb_meas_config_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_meas_config *arg)
+{
+ u32 reg_val = 0;
+ /* based on the mode,configure the awb module */
+ if (arg->awb_mode == RKISP1_CIF_ISP_AWB_MODE_YCBCR) {
+ /* Reference Cb and Cr */
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_AWB_REF_CR_SET(arg->awb_ref_cr) |
+ arg->awb_ref_cb, RKISP1_CIF_ISP_AWB_REF_V12);
+ /* Yc Threshold */
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_AWB_MAX_Y_SET(arg->max_y) |
+ RKISP1_CIF_ISP_AWB_MIN_Y_SET(arg->min_y) |
+ RKISP1_CIF_ISP_AWB_MAX_CS_SET(arg->max_csum) |
+ arg->min_c, RKISP1_CIF_ISP_AWB_THRESH_V12);
+ }
+
+ reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V12);
+ if (arg->enable_ymax_cmp)
+ reg_val |= RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
+ else
+ reg_val &= ~RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
+ reg_val &= ~RKISP1_CIF_ISP_AWB_SET_FRAMES_MASK_V12;
+ reg_val |= RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(arg->frames);
+ rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
+
+ /* window offset */
+ rkisp1_write(params->rkisp1,
+ arg->awb_wnd.v_offs << 16 |
+ arg->awb_wnd.h_offs,
+ RKISP1_CIF_ISP_AWB_OFFS_V12);
+ /* AWB window size */
+ rkisp1_write(params->rkisp1,
+ arg->awb_wnd.v_size << 16 |
+ arg->awb_wnd.h_size,
+ RKISP1_CIF_ISP_AWB_SIZE_V12);
+}
+
static void
rkisp1_awb_meas_enable_v10(struct rkisp1_params *params,
const struct rkisp1_cif_isp_awb_meas_config *arg,
@@ -502,6 +632,35 @@ rkisp1_awb_meas_enable_v10(struct rkisp1_params *params,
}
}
+static void
+rkisp1_awb_meas_enable_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_meas_config *arg,
+ bool en)
+{
+ u32 reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V12);
+
+ /* switch off */
+ reg_val &= RKISP1_CIF_ISP_AWB_MODE_MASK_NONE;
+
+ if (en) {
+ if (arg->awb_mode == RKISP1_CIF_ISP_AWB_MODE_RGB)
+ reg_val |= RKISP1_CIF_ISP_AWB_MODE_RGB_EN;
+ else
+ reg_val |= RKISP1_CIF_ISP_AWB_MODE_YCBCR_EN;
+
+ rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
+
+ /* Measurements require AWB block be active. */
+ rkisp1_param_set_bits(params, RKISP1_CIF_ISP_CTRL,
+ RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
+ } else {
+ rkisp1_write(params->rkisp1,
+ reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
+ rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
+ RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
+ }
+}
+
static void
rkisp1_awb_gain_config_v10(struct rkisp1_params *params,
const struct rkisp1_cif_isp_awb_gain_config *arg)
@@ -515,6 +674,19 @@ rkisp1_awb_gain_config_v10(struct rkisp1_params *params,
arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB_V10);
}
+static void
+rkisp1_awb_gain_config_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_gain_config *arg)
+{
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_green_r) |
+ arg->gain_green_b, RKISP1_CIF_ISP_AWB_GAIN_G_V12);
+
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_red) |
+ arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB_V12);
+}
+
static void rkisp1_aec_config_v10(struct rkisp1_params *params,
const struct rkisp1_cif_isp_aec_config *arg)
{
@@ -548,6 +720,38 @@ static void rkisp1_aec_config_v10(struct rkisp1_params *params,
RKISP1_CIF_ISP_EXP_V_SIZE_V10);
}
+static void rkisp1_aec_config_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_aec_config *arg)
+{
+ u32 exp_ctrl;
+ u32 block_hsize, block_vsize;
+ u32 wnd_num_idx = 1;
+ const u32 ae_wnd_num[] = { 5, 9, 15, 15 };
+
+ /* avoid to override the old enable value */
+ exp_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_EXP_CTRL);
+ exp_ctrl &= RKISP1_CIF_ISP_EXP_ENA;
+ if (arg->autostop)
+ exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_AUTOSTOP;
+ if (arg->mode == RKISP1_CIF_ISP_EXP_MEASURING_MODE_1)
+ exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_MEASMODE_1;
+ exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_WNDNUM_SET_V12(wnd_num_idx);
+ rkisp1_write(params->rkisp1, exp_ctrl, RKISP1_CIF_ISP_EXP_CTRL);
+
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V12(arg->meas_window.v_offs) |
+ RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V12(arg->meas_window.h_offs),
+ RKISP1_CIF_ISP_EXP_OFFS_V12);
+
+ block_hsize = arg->meas_window.h_size / ae_wnd_num[wnd_num_idx] - 1;
+ block_vsize = arg->meas_window.v_size / ae_wnd_num[wnd_num_idx] - 1;
+
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_EXP_V_SIZE_SET_V12(block_vsize) |
+ RKISP1_CIF_ISP_EXP_H_SIZE_SET_V12(block_hsize),
+ RKISP1_CIF_ISP_EXP_SIZE_V12);
+}
+
static void rkisp1_cproc_config(struct rkisp1_params *params,
const struct rkisp1_cif_isp_cproc_config *arg)
{
@@ -625,6 +829,64 @@ static void rkisp1_hst_config_v10(struct rkisp1_params *params,
rkisp1_write(params->rkisp1, weight[0] & 0x1F, RKISP1_CIF_ISP_HIST_WEIGHT_44_V10);
}
+static void rkisp1_hst_config_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_hst_config *arg)
+{
+ unsigned int i, j;
+ u32 block_hsize, block_vsize;
+ u32 wnd_num_idx, hist_weight_num, hist_ctrl, value;
+ u8 weight15x15[RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12];
+ const u32 hist_wnd_num[] = { 5, 9, 15, 15 };
+
+ /* now we just support 9x9 window */
+ wnd_num_idx = 1;
+ memset(weight15x15, 0x00, sizeof(weight15x15));
+ /* avoid to override the old enable value */
+ hist_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_HIST_CTRL_V12);
+ hist_ctrl &= RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 |
+ RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12;
+ hist_ctrl = hist_ctrl |
+ RKISP1_CIF_ISP_HIST_CTRL_INTRSEL_SET_V12(1) |
+ RKISP1_CIF_ISP_HIST_CTRL_DATASEL_SET_V12(0) |
+ RKISP1_CIF_ISP_HIST_CTRL_WATERLINE_SET_V12(0) |
+ RKISP1_CIF_ISP_HIST_CTRL_AUTOSTOP_SET_V12(0) |
+ RKISP1_CIF_ISP_HIST_CTRL_WNDNUM_SET_V12(1) |
+ RKISP1_CIF_ISP_HIST_CTRL_STEPSIZE_SET_V12(arg->histogram_predivider);
+ rkisp1_write(params->rkisp1, hist_ctrl, RKISP1_CIF_ISP_HIST_CTRL_V12);
+
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_HIST_OFFS_SET_V12(arg->meas_window.h_offs,
+ arg->meas_window.v_offs),
+ RKISP1_CIF_ISP_HIST_OFFS_V12);
+
+ block_hsize = arg->meas_window.h_size / hist_wnd_num[wnd_num_idx] - 1;
+ block_vsize = arg->meas_window.v_size / hist_wnd_num[wnd_num_idx] - 1;
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_HIST_SIZE_SET_V12(block_hsize, block_vsize),
+ RKISP1_CIF_ISP_HIST_SIZE_V12);
+
+ for (i = 0; i < hist_wnd_num[wnd_num_idx]; i++) {
+ for (j = 0; j < hist_wnd_num[wnd_num_idx]; j++) {
+ weight15x15[i * RKISP1_CIF_ISP_HIST_ROW_NUM_V12 + j] =
+ arg->hist_weight[i * hist_wnd_num[wnd_num_idx] + j];
+ }
+ }
+
+ hist_weight_num = RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12;
+ for (i = 0; i < (hist_weight_num / 4); i++) {
+ value = RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(
+ weight15x15[4 * i + 0],
+ weight15x15[4 * i + 1],
+ weight15x15[4 * i + 2],
+ weight15x15[4 * i + 3]);
+ rkisp1_write(params->rkisp1, value,
+ RKISP1_CIF_ISP_HIST_WEIGHT_V12 + 4 * i);
+ }
+ value = RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(weight15x15[4 * i + 0], 0, 0, 0);
+ rkisp1_write(params->rkisp1, value,
+ RKISP1_CIF_ISP_HIST_WEIGHT_V12 + 4 * i);
+}
+
static void
rkisp1_hst_enable_v10(struct rkisp1_params *params,
const struct rkisp1_cif_isp_hst_config *arg, bool en)
@@ -643,6 +905,26 @@ rkisp1_hst_enable_v10(struct rkisp1_params *params,
}
}
+static void
+rkisp1_hst_enable_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_hst_config *arg, bool en)
+{
+ if (en) {
+ u32 hist_ctrl = rkisp1_read(params->rkisp1,
+ RKISP1_CIF_ISP_HIST_CTRL_V12);
+
+ hist_ctrl &= ~RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12;
+ hist_ctrl |= RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(arg->mode);
+ hist_ctrl |= RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(1);
+ rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_CTRL_V12,
+ hist_ctrl);
+ } else {
+ rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_HIST_CTRL_V12,
+ RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 |
+ RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12);
+ }
+}
+
static void rkisp1_afm_config_v10(struct rkisp1_params *params,
const struct rkisp1_cif_isp_afc_config *arg)
{
@@ -674,6 +956,45 @@ static void rkisp1_afm_config_v10(struct rkisp1_params *params,
rkisp1_write(params->rkisp1, afm_ctrl, RKISP1_CIF_ISP_AFM_CTRL);
}
+static void rkisp1_afm_config_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_afc_config *arg)
+{
+ size_t num_of_win = min_t(size_t, ARRAY_SIZE(arg->afm_win),
+ arg->num_afm_win);
+ u32 afm_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AFM_CTRL);
+ u32 lum_var_shift, afm_var_shift;
+ unsigned int i;
+
+ /* Switch off to configure. */
+ rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
+ RKISP1_CIF_ISP_AFM_ENA);
+
+ for (i = 0; i < num_of_win; i++) {
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_AFM_WINDOW_X(arg->afm_win[i].h_offs) |
+ RKISP1_CIF_ISP_AFM_WINDOW_Y(arg->afm_win[i].v_offs),
+ RKISP1_CIF_ISP_AFM_LT_A + i * 8);
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_AFM_WINDOW_X(arg->afm_win[i].h_size +
+ arg->afm_win[i].h_offs) |
+ RKISP1_CIF_ISP_AFM_WINDOW_Y(arg->afm_win[i].v_size +
+ arg->afm_win[i].v_offs),
+ RKISP1_CIF_ISP_AFM_RB_A + i * 8);
+ }
+ rkisp1_write(params->rkisp1, arg->thres, RKISP1_CIF_ISP_AFM_THRES);
+
+ lum_var_shift = RKISP1_CIF_ISP_AFM_GET_LUM_SHIFT_a_V12(arg->var_shift);
+ afm_var_shift = RKISP1_CIF_ISP_AFM_GET_AFM_SHIFT_a_V12(arg->var_shift);
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_AFM_SET_SHIFT_a_V12(lum_var_shift, afm_var_shift) |
+ RKISP1_CIF_ISP_AFM_SET_SHIFT_b_V12(lum_var_shift, afm_var_shift) |
+ RKISP1_CIF_ISP_AFM_SET_SHIFT_c_V12(lum_var_shift, afm_var_shift),
+ RKISP1_CIF_ISP_AFM_VAR_SHIFT);
+
+ /* restore afm status */
+ rkisp1_write(params->rkisp1, afm_ctrl, RKISP1_CIF_ISP_AFM_CTRL);
+}
+
static void rkisp1_ie_config(struct rkisp1_params *params,
const struct rkisp1_cif_isp_ie_config *arg)
{
@@ -1305,6 +1626,18 @@ static struct rkisp1_params_ops rkisp1_v10_params_ops = {
.afm_config = rkisp1_afm_config_v10,
};
+static struct rkisp1_params_ops rkisp1_v12_params_ops = {
+ .lsc_matrix_config = rkisp1_lsc_matrix_config_v12,
+ .goc_config = rkisp1_goc_config_v12,
+ .awb_meas_config = rkisp1_awb_meas_config_v12,
+ .awb_meas_enable = rkisp1_awb_meas_enable_v12,
+ .awb_gain_config = rkisp1_awb_gain_config_v12,
+ .aec_config = rkisp1_aec_config_v12,
+ .hst_config = rkisp1_hst_config_v12,
+ .hst_enable = rkisp1_hst_enable_v12,
+ .afm_config = rkisp1_afm_config_v12,
+};
+
static int rkisp1_params_enum_fmt_meta_out(struct file *file, void *priv,
struct v4l2_fmtdesc *f)
{
@@ -1472,7 +1805,10 @@ static void rkisp1_init_params(struct rkisp1_params *params)
params->vdev_fmt.fmt.meta.buffersize =
sizeof(struct rkisp1_params_cfg);
- params->ops = &rkisp1_v10_params_ops;
+ if (params->rkisp1->media_dev.hw_revision == RKISP1_V12)
+ params->ops = &rkisp1_v12_params_ops;
+ else
+ params->ops = &rkisp1_v10_params_ops;
}
int rkisp1_params_register(struct rkisp1_device *rkisp1)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
index c71ccd148bde..d326214c7e07 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
@@ -396,6 +396,38 @@
#define RKISP1_CIF_ISP_HIST_COLUMN_NUM_V10 5
#define RKISP1_CIF_ISP_HIST_GET_BIN_V10(x) ((x) & 0x000FFFFF)
+/* ISP HISTOGRAM CALCULATION : CIF_ISP_HIST */
+#define RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(x) (((x) & 0x01) << 0)
+#define RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12 RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(0x01)
+#define RKISP1_CIF_ISP_HIST_CTRL_STEPSIZE_SET_V12(x) (((x) & 0x7F) << 1)
+#define RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(x) (((x) & 0x07) << 8)
+#define RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(0x07)
+#define RKISP1_CIF_ISP_HIST_CTRL_AUTOSTOP_SET_V12(x) (((x) & 0x01) << 11)
+#define RKISP1_CIF_ISP_HIST_CTRL_WATERLINE_SET_V12(x) (((x) & 0xFFF) << 12)
+#define RKISP1_CIF_ISP_HIST_CTRL_DATASEL_SET_V12(x) (((x) & 0x07) << 24)
+#define RKISP1_CIF_ISP_HIST_CTRL_INTRSEL_SET_V12(x) (((x) & 0x01) << 27)
+#define RKISP1_CIF_ISP_HIST_CTRL_WNDNUM_SET_V12(x) (((x) & 0x03) << 28)
+#define RKISP1_CIF_ISP_HIST_CTRL_DBGEN_SET_V12(x) (((x) & 0x01) << 30)
+#define RKISP1_CIF_ISP_HIST_ROW_NUM_V12 15
+#define RKISP1_CIF_ISP_HIST_COLUMN_NUM_V12 15
+#define RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12 \
+ (RKISP1_CIF_ISP_HIST_ROW_NUM_V12 * RKISP1_CIF_ISP_HIST_COLUMN_NUM_V12)
+
+#define RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(v0, v1, v2, v3) \
+ (((v0) & 0x3F) | (((v1) & 0x3F) << 8) |\
+ (((v2) & 0x3F) << 16) |\
+ (((v3) & 0x3F) << 24))
+
+#define RKISP1_CIF_ISP_HIST_OFFS_SET_V12(v0, v1) \
+ (((v0) & 0x1FFF) | (((v1) & 0x1FFF) << 16))
+#define RKISP1_CIF_ISP_HIST_SIZE_SET_V12(v0, v1) \
+ (((v0) & 0x7FF) | (((v1) & 0x7FF) << 16))
+
+#define RKISP1_CIF_ISP_HIST_GET_BIN0_V12(x) \
+ ((x) & 0xFFFF)
+#define RKISP1_CIF_ISP_HIST_GET_BIN1_V12(x) \
+ (((x) >> 16) & 0xFFFF)
+
/* AUTO FOCUS MEASUREMENT: ISP_AFM_CTRL */
#define RKISP1_ISP_AFM_CTRL_ENABLE BIT(0)
@@ -430,6 +462,8 @@
#define RKISP1_CIF_ISP_AWB_MODE_YCBCR_EN ((0 << 31) | (0x2 << 0))
#define RKISP1_CIF_ISP_AWB_MODE_MASK_NONE 0xFFFFFFFC
#define RKISP1_CIF_ISP_AWB_MODE_READ(x) ((x) & 3)
+#define RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(x) (((x) & 0x07) << 28)
+#define RKISP1_CIF_ISP_AWB_SET_FRAMES_MASK_V12 RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(0x07)
/* ISP_AWB_GAIN_RB, ISP_AWB_GAIN_G */
#define RKISP1_CIF_ISP_AWB_GAIN_R_SET(x) (((x) & 0x3FF) << 16)
#define RKISP1_CIF_ISP_AWB_GAIN_R_READ(x) (((x) >> 16) & 0x3FF)
@@ -464,6 +498,7 @@
/* ISP_EXP_CTRL */
#define RKISP1_CIF_ISP_EXP_ENA BIT(0)
#define RKISP1_CIF_ISP_EXP_CTRL_AUTOSTOP BIT(1)
+#define RKISP1_CIF_ISP_EXP_CTRL_WNDNUM_SET_V12(x) (((x) & 0x03) << 2)
/*
*'1' luminance calculation according to Y=(R+G+B) x 0.332 (85/256)
*'0' luminance calculation according to Y=16+0.25R+0.5G+0.1094B
@@ -473,15 +508,22 @@
/* ISP_EXP_H_SIZE */
#define RKISP1_CIF_ISP_EXP_H_SIZE_SET_V10(x) ((x) & 0x7FF)
#define RKISP1_CIF_ISP_EXP_HEIGHT_MASK_V10 0x000007FF
+#define RKISP1_CIF_ISP_EXP_H_SIZE_SET_V12(x) ((x) & 0x7FF)
+#define RKISP1_CIF_ISP_EXP_HEIGHT_MASK_V12 0x000007FF
/* ISP_EXP_V_SIZE : vertical size must be a multiple of 2). */
#define RKISP1_CIF_ISP_EXP_V_SIZE_SET_V10(x) ((x) & 0x7FE)
+#define RKISP1_CIF_ISP_EXP_V_SIZE_SET_V12(x) (((x) & 0x7FE) << 16)
/* ISP_EXP_H_OFFSET */
#define RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V10(x) ((x) & 0x1FFF)
#define RKISP1_CIF_ISP_EXP_MAX_HOFFS_V10 2424
+#define RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V12(x) ((x) & 0x1FFF)
+#define RKISP1_CIF_ISP_EXP_MAX_HOFFS_V12 0x1FFF
/* ISP_EXP_V_OFFSET */
#define RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V10(x) ((x) & 0x1FFF)
#define RKISP1_CIF_ISP_EXP_MAX_VOFFS_V10 1806
+#define RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V12(x) (((x) & 0x1FFF) << 16)
+#define RKISP1_CIF_ISP_EXP_MAX_VOFFS_V12 0x1FFF
#define RKISP1_CIF_ISP_EXP_ROW_NUM_V10 5
#define RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 5
@@ -500,13 +542,40 @@
#define RKISP1_CIF_ISP_EXP_MIN_VSIZE_V10 \
(RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V10 * RKISP1_CIF_ISP_EXP_ROW_NUM_V10 + 1)
+#define RKISP1_CIF_ISP_EXP_ROW_NUM_V12 15
+#define RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 15
+#define RKISP1_CIF_ISP_EXP_NUM_LUMA_REGS_V12 \
+ (RKISP1_CIF_ISP_EXP_ROW_NUM_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12)
+
+#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V12 0x7FF
+#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V12 0xE
+#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V12 0x7FE
+#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V12 0xE
+#define RKISP1_CIF_ISP_EXP_MAX_HSIZE_V12 \
+ (RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 + 1)
+#define RKISP1_CIF_ISP_EXP_MIN_HSIZE_V12 \
+ (RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 + 1)
+#define RKISP1_CIF_ISP_EXP_MAX_VSIZE_V12 \
+ (RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V12 * RKISP1_CIF_ISP_EXP_ROW_NUM_V12 + 1)
+#define RKISP1_CIF_ISP_EXP_MIN_VSIZE_V12 \
+ (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V12 * RKISP1_CIF_ISP_EXP_ROW_NUM_V12 + 1)
+
+#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(x) ((x) & 0xFF)
+#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy1_V12(x) (((x) >> 8) & 0xFF)
+#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy2_V12(x) (((x) >> 16) & 0xFF)
+#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy3_V12(x) (((x) >> 24) & 0xFF)
+
/* LSC: ISP_LSC_CTRL */
#define RKISP1_CIF_ISP_LSC_CTRL_ENA BIT(0)
#define RKISP1_CIF_ISP_LSC_SECT_SIZE_RESERVED 0xFC00FC00
#define RKISP1_CIF_ISP_LSC_GRAD_RESERVED_V10 0xF000F000
#define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED_V10 0xF000F000
+#define RKISP1_CIF_ISP_LSC_GRAD_RESERVED_V12 0xE000E000
+#define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED_V12 0xE000E000
#define RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(v0, v1) \
(((v0) & 0xFFF) | (((v1) & 0xFFF) << 12))
+#define RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(v0, v1) \
+ (((v0) & 0x1FFF) | (((v1) & 0x1FFF) << 13))
#define RKISP1_CIF_ISP_LSC_SECT_SIZE(v0, v1) \
(((v0) & 0xFFF) | (((v1) & 0xFFF) << 16))
#define RKISP1_CIF_ISP_LSC_GRAD_SIZE(v0, v1) \
@@ -579,6 +648,10 @@
(1 << 15) | (1 << 11) | (1 << 7) | (1 << 3))
#define RKISP1_CIFISP_DEGAMMA_Y_RESERVED 0xFFFFF000
+/* GAMMA-OUT */
+#define RKISP1_CIF_ISP_GAMMA_VALUE_V12(x, y) \
+ (((x) & 0xFFF) << 16 | ((y) & 0xFFF) << 0)
+
/* AFM */
#define RKISP1_CIF_ISP_AFM_ENA BIT(0)
#define RKISP1_CIF_ISP_AFM_THRES_RESERVED 0xFFFF0000
@@ -589,6 +662,11 @@
#define RKISP1_CIF_ISP_AFM_WINDOW_Y_MIN 0x2
#define RKISP1_CIF_ISP_AFM_WINDOW_X(x) (((x) & 0x1FFF) << 16)
#define RKISP1_CIF_ISP_AFM_WINDOW_Y(x) ((x) & 0x1FFF)
+#define RKISP1_CIF_ISP_AFM_SET_SHIFT_a_V12(x, y) (((x) & 0x7) << 16 | ((y) & 0x7) << 0)
+#define RKISP1_CIF_ISP_AFM_SET_SHIFT_b_V12(x, y) (((x) & 0x7) << 20 | ((y) & 0x7) << 4)
+#define RKISP1_CIF_ISP_AFM_SET_SHIFT_c_V12(x, y) (((x) & 0x7) << 24 | ((y) & 0x7) << 8)
+#define RKISP1_CIF_ISP_AFM_GET_LUM_SHIFT_a_V12(x) (((x) & 0x70000) >> 16)
+#define RKISP1_CIF_ISP_AFM_GET_AFM_SHIFT_a_V12(x) ((x) & 0x7)
/* DPF */
#define RKISP1_CIF_ISP_DPF_MODE_EN BIT(0)
@@ -611,6 +689,7 @@
#define RKISP1_CIF_CTRL_BASE 0x00000000
#define RKISP1_CIF_CCL (RKISP1_CIF_CTRL_BASE + 0x00000000)
#define RKISP1_CIF_VI_ID (RKISP1_CIF_CTRL_BASE + 0x00000008)
+#define RKISP1_CIF_VI_ISP_CLK_CTRL_V12 (RKISP1_CIF_CTRL_BASE + 0x0000000C)
#define RKISP1_CIF_ICCL (RKISP1_CIF_CTRL_BASE + 0x00000010)
#define RKISP1_CIF_IRCL (RKISP1_CIF_CTRL_BASE + 0x00000014)
#define RKISP1_CIF_VI_DPCL (RKISP1_CIF_CTRL_BASE + 0x00000018)
@@ -708,6 +787,23 @@
#define RKISP1_CIF_ISP_AWB_GAIN_RB_V10 (RKISP1_CIF_ISP_BASE + 0x0000013C)
#define RKISP1_CIF_ISP_AWB_WHITE_CNT_V10 (RKISP1_CIF_ISP_BASE + 0x00000140)
#define RKISP1_CIF_ISP_AWB_MEAN_V10 (RKISP1_CIF_ISP_BASE + 0x00000144)
+#define RKISP1_CIF_ISP_AWB_PROP_V12 (RKISP1_CIF_ISP_BASE + 0x00000110)
+#define RKISP1_CIF_ISP_AWB_SIZE_V12 (RKISP1_CIF_ISP_BASE + 0x00000114)
+#define RKISP1_CIF_ISP_AWB_OFFS_V12 (RKISP1_CIF_ISP_BASE + 0x00000118)
+#define RKISP1_CIF_ISP_AWB_REF_V12 (RKISP1_CIF_ISP_BASE + 0x0000011C)
+#define RKISP1_CIF_ISP_AWB_THRESH_V12 (RKISP1_CIF_ISP_BASE + 0x00000120)
+#define RKISP1_CIF_ISP_X_COOR12_V12 (RKISP1_CIF_ISP_BASE + 0x00000124)
+#define RKISP1_CIF_ISP_X_COOR34_V12 (RKISP1_CIF_ISP_BASE + 0x00000128)
+#define RKISP1_CIF_ISP_AWB_WHITE_CNT_V12 (RKISP1_CIF_ISP_BASE + 0x0000012C)
+#define RKISP1_CIF_ISP_AWB_MEAN_V12 (RKISP1_CIF_ISP_BASE + 0x00000130)
+#define RKISP1_CIF_ISP_DEGAIN_V12 (RKISP1_CIF_ISP_BASE + 0x00000134)
+#define RKISP1_CIF_ISP_AWB_GAIN_G_V12 (RKISP1_CIF_ISP_BASE + 0x00000138)
+#define RKISP1_CIF_ISP_AWB_GAIN_RB_V12 (RKISP1_CIF_ISP_BASE + 0x0000013C)
+#define RKISP1_CIF_ISP_REGION_LINE_V12 (RKISP1_CIF_ISP_BASE + 0x00000140)
+#define RKISP1_CIF_ISP_WP_CNT_REGION0_V12 (RKISP1_CIF_ISP_BASE + 0x00000160)
+#define RKISP1_CIF_ISP_WP_CNT_REGION1_V12 (RKISP1_CIF_ISP_BASE + 0x00000164)
+#define RKISP1_CIF_ISP_WP_CNT_REGION2_V12 (RKISP1_CIF_ISP_BASE + 0x00000168)
+#define RKISP1_CIF_ISP_WP_CNT_REGION3_V12 (RKISP1_CIF_ISP_BASE + 0x0000016C)
#define RKISP1_CIF_ISP_CC_COEFF_0 (RKISP1_CIF_ISP_BASE + 0x00000170)
#define RKISP1_CIF_ISP_CC_COEFF_1 (RKISP1_CIF_ISP_BASE + 0x00000174)
#define RKISP1_CIF_ISP_CC_COEFF_2 (RKISP1_CIF_ISP_BASE + 0x00000178)
@@ -765,6 +861,8 @@
#define RKISP1_CIF_ISP_CT_OFFSET_R (RKISP1_CIF_ISP_BASE + 0x00000248)
#define RKISP1_CIF_ISP_CT_OFFSET_G (RKISP1_CIF_ISP_BASE + 0x0000024C)
#define RKISP1_CIF_ISP_CT_OFFSET_B (RKISP1_CIF_ISP_BASE + 0x00000250)
+#define RKISP1_CIF_ISP_GAMMA_OUT_MODE_V12 (RKISP1_CIF_ISP_BASE + 0x00000300)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V12 (RKISP1_CIF_ISP_BASE + 0x00000304)
#define RKISP1_CIF_ISP_FLASH_BASE 0x00000660
#define RKISP1_CIF_ISP_FLASH_CMD (RKISP1_CIF_ISP_FLASH_BASE + 0x00000000)
@@ -1117,6 +1215,9 @@
#define RKISP1_CIF_ISP_EXP_MEAN_24_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000006c)
#define RKISP1_CIF_ISP_EXP_MEAN_34_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000070)
#define RKISP1_CIF_ISP_EXP_MEAN_44_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000074)
+#define RKISP1_CIF_ISP_EXP_SIZE_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x00000004)
+#define RKISP1_CIF_ISP_EXP_OFFS_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x00000008)
+#define RKISP1_CIF_ISP_EXP_MEAN_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x0000000c)
#define RKISP1_CIF_ISP_BLS_BASE 0x00002700
#define RKISP1_CIF_ISP_BLS_CTRL (RKISP1_CIF_ISP_BLS_BASE + 0x00000000)
@@ -1277,6 +1378,16 @@
#define RKISP1_CIF_ISP_WDR_TONECURVE_YM_31_SHD (RKISP1_CIF_ISP_WDR_BASE + 0x0000012C)
#define RKISP1_CIF_ISP_WDR_TONECURVE_YM_32_SHD (RKISP1_CIF_ISP_WDR_BASE + 0x00000130)
+#define RKISP1_CIF_ISP_HIST_BASE_V12 0x00002C00
+#define RKISP1_CIF_ISP_HIST_CTRL_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000000)
+#define RKISP1_CIF_ISP_HIST_SIZE_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000004)
+#define RKISP1_CIF_ISP_HIST_OFFS_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000008)
+#define RKISP1_CIF_ISP_HIST_DBG1_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000000C)
+#define RKISP1_CIF_ISP_HIST_DBG2_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000001C)
+#define RKISP1_CIF_ISP_HIST_DBG3_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000002C)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000003C)
+#define RKISP1_CIF_ISP_HIST_BIN_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000120)
+
#define RKISP1_CIF_ISP_VSM_BASE 0x00002F00
#define RKISP1_CIF_ISP_VSM_MODE (RKISP1_CIF_ISP_VSM_BASE + 0x00000000)
#define RKISP1_CIF_ISP_VSM_H_OFFS (RKISP1_CIF_ISP_VSM_BASE + 0x00000004)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
index 3f286c55ad60..dd99d7ea9ff6 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
@@ -196,6 +196,27 @@ static void rkisp1_stats_get_awb_meas_v10(struct rkisp1_stats *stats,
RKISP1_CIF_ISP_AWB_GET_MEAN_Y_G(reg_val);
}
+static void rkisp1_stats_get_awb_meas_v12(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf)
+{
+ /* Protect against concurrent access from ISR? */
+ struct rkisp1_device *rkisp1 = stats->rkisp1;
+ u32 reg_val;
+
+ pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AWB;
+ reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_WHITE_CNT_V12);
+ pbuf->params.awb.awb_mean[0].cnt =
+ RKISP1_CIF_ISP_AWB_GET_PIXEL_CNT(reg_val);
+ reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_MEAN_V12);
+
+ pbuf->params.awb.awb_mean[0].mean_cr_or_r =
+ RKISP1_CIF_ISP_AWB_GET_MEAN_CR_R(reg_val);
+ pbuf->params.awb.awb_mean[0].mean_cb_or_b =
+ RKISP1_CIF_ISP_AWB_GET_MEAN_CB_B(reg_val);
+ pbuf->params.awb.awb_mean[0].mean_y_or_g =
+ RKISP1_CIF_ISP_AWB_GET_MEAN_Y_G(reg_val);
+}
+
static void rkisp1_stats_get_aec_meas_v10(struct rkisp1_stats *stats,
struct rkisp1_stat_buffer *pbuf)
{
@@ -209,6 +230,30 @@ static void rkisp1_stats_get_aec_meas_v10(struct rkisp1_stats *stats,
RKISP1_CIF_ISP_EXP_MEAN_00_V10 + i * 4);
}
+static void rkisp1_stats_get_aec_meas_v12(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf)
+{
+ struct rkisp1_device *rkisp1 = stats->rkisp1;
+ u32 value;
+ int i;
+
+ pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AUTOEXP;
+ for (i = 0; i < RKISP1_CIF_ISP_AE_MEAN_MAX_V12 / 4; i++) {
+ value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_EXP_MEAN_V12 + i * 4);
+ pbuf->params.ae.exp_mean[4 * i + 0] =
+ RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(value);
+ pbuf->params.ae.exp_mean[4 * i + 1] =
+ RKISP1_CIF_ISP_EXP_GET_MEAN_xy1_V12(value);
+ pbuf->params.ae.exp_mean[4 * i + 2] =
+ RKISP1_CIF_ISP_EXP_GET_MEAN_xy2_V12(value);
+ pbuf->params.ae.exp_mean[4 * i + 3] =
+ RKISP1_CIF_ISP_EXP_GET_MEAN_xy3_V12(value);
+ }
+
+ value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_EXP_MEAN_V12 + i * 4);
+ pbuf->params.ae.exp_mean[4 * i + 0] = RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(value);
+}
+
static void rkisp1_stats_get_afc_meas(struct rkisp1_stats *stats,
struct rkisp1_stat_buffer *pbuf)
{
@@ -240,6 +285,23 @@ static void rkisp1_stats_get_hst_meas_v10(struct rkisp1_stats *stats,
}
}
+static void rkisp1_stats_get_hst_meas_v12(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf)
+{
+ struct rkisp1_device *rkisp1 = stats->rkisp1;
+ u32 value;
+ int i;
+
+ pbuf->meas_type |= RKISP1_CIF_ISP_STAT_HIST;
+ for (i = 0; i < RKISP1_CIF_ISP_HIST_BIN_N_MAX_V12 / 2; i++) {
+ value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_HIST_BIN_V12 + i * 4);
+ pbuf->params.hist.hist_bins[2 * i] =
+ RKISP1_CIF_ISP_HIST_GET_BIN0_V12(value);
+ pbuf->params.hist.hist_bins[2 * i + 1] =
+ RKISP1_CIF_ISP_HIST_GET_BIN1_V12(value);
+ }
+}
+
static void rkisp1_stats_get_bls_meas(struct rkisp1_stats *stats,
struct rkisp1_stat_buffer *pbuf)
{
@@ -293,6 +355,12 @@ static struct rkisp1_stats_ops rkisp1_v10_stats_ops = {
.get_hst_meas = rkisp1_stats_get_hst_meas_v10,
};
+static struct rkisp1_stats_ops rkisp1_v12_stats_ops = {
+ .get_awb_meas = rkisp1_stats_get_awb_meas_v12,
+ .get_aec_meas = rkisp1_stats_get_aec_meas_v12,
+ .get_hst_meas = rkisp1_stats_get_hst_meas_v12,
+};
+
static void
rkisp1_stats_send_measurement(struct rkisp1_stats *stats, u32 isp_ris)
{
@@ -361,7 +429,10 @@ static void rkisp1_init_stats(struct rkisp1_stats *stats)
stats->vdev_fmt.fmt.meta.buffersize =
sizeof(struct rkisp1_stat_buffer);
- stats->ops = &rkisp1_v10_stats_ops;
+ if (stats->rkisp1->media_dev.hw_revision == RKISP1_V12)
+ stats->ops = &rkisp1_v12_stats_ops;
+ else
+ stats->ops = &rkisp1_v10_stats_ops;
}
int rkisp1_stats_register(struct rkisp1_device *rkisp1)
--
2.29.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v2 6/7] media: rockchip: rkisp1: add support for v12 isp variants
@ 2021-06-15 0:37 ` Heiko Stuebner
0 siblings, 0 replies; 38+ messages in thread
From: Heiko Stuebner @ 2021-06-15 0:37 UTC (permalink / raw)
To: mchehab, hverkuil-cisco
Cc: ezequiel, dafna.hirschfeld, helen.koike, Laurent.pinchart,
linux-rockchip, linux-media, heiko, Heiko Stuebner
From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
The rkisp1 evolved over soc generations and the rk3326/px30 introduced
the so called v12 - probably meaning v1.2.
Add the new register definitions.
Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
---
.../platform/rockchip/rkisp1/rkisp1-isp.c | 13 +
.../platform/rockchip/rkisp1/rkisp1-params.c | 338 +++++++++++++++++-
.../platform/rockchip/rkisp1/rkisp1-regs.h | 111 ++++++
.../platform/rockchip/rkisp1/rkisp1-stats.c | 73 +++-
4 files changed, 533 insertions(+), 2 deletions(-)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
index 1de98e688008..36829e3bdda0 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
@@ -408,6 +408,10 @@ static int rkisp1_config_mipi(struct rkisp1_device *rkisp1)
rkisp1_write(rkisp1, mipi_ctrl, RKISP1_CIF_MIPI_CTRL);
+ /* V12 could also use a newer csi2-host, but we don't want that yet */
+ if (rkisp1->media_dev.hw_revision == RKISP1_V12)
+ rkisp1_write(rkisp1, 0, RKISP1_CIF_ISP_CSI0_CTRL0);
+
/* Configure Data Type and Virtual Channel */
rkisp1_write(rkisp1,
RKISP1_CIF_MIPI_DATA_SEL_DT(sink_fmt->mipi_dt) |
@@ -527,6 +531,15 @@ static void rkisp1_config_clk(struct rkisp1_device *rkisp1)
RKISP1_CIF_ICCL_DCROP_CLK;
rkisp1_write(rkisp1, val, RKISP1_CIF_ICCL);
+
+ /* ensure sp and mp can run at the same time in V12 */
+ if (rkisp1->media_dev.hw_revision == RKISP1_V12) {
+ val = RKISP1_CIF_CLK_CTRL_MI_Y12 | RKISP1_CIF_CLK_CTRL_MI_SP |
+ RKISP1_CIF_CLK_CTRL_MI_RAW0 | RKISP1_CIF_CLK_CTRL_MI_RAW1 |
+ RKISP1_CIF_CLK_CTRL_MI_READ | RKISP1_CIF_CLK_CTRL_MI_RAWRD |
+ RKISP1_CIF_CLK_CTRL_CP | RKISP1_CIF_CLK_CTRL_IE;
+ rkisp1_write(rkisp1, val, RKISP1_CIF_VI_ISP_CLK_CTRL_V12);
+ }
}
static void rkisp1_isp_start(struct rkisp1_device *rkisp1)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
index 427c7cc400b2..0d2b77dd11f5 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
@@ -255,6 +255,78 @@ rkisp1_lsc_matrix_config_v10(struct rkisp1_params *params,
RKISP1_CIF_ISP_LSC_TABLE_SEL);
}
+static void
+rkisp1_lsc_matrix_config_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_lsc_config *pconfig)
+{
+ unsigned int isp_lsc_status, sram_addr, isp_lsc_table_sel, i, j, data;
+
+ isp_lsc_status = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_LSC_STATUS);
+
+ /* RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_153 = ( 17 * 18 ) >> 1 */
+ sram_addr = (isp_lsc_status & RKISP1_CIF_ISP_LSC_ACTIVE_TABLE) ?
+ RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_0 :
+ RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_153;
+ rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_R_TABLE_ADDR);
+ rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_GR_TABLE_ADDR);
+ rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_GB_TABLE_ADDR);
+ rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_B_TABLE_ADDR);
+
+ /* program data tables (table size is 9 * 17 = 153) */
+ for (i = 0; i < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; i++) {
+ /*
+ * 17 sectors with 2 values in one DWORD = 9
+ * DWORDs (2nd value of last DWORD unused)
+ */
+ for (j = 0; j < RKISP1_CIF_ISP_LSC_SAMPLES_MAX - 1; j += 2) {
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
+ pconfig->r_data_tbl[i][j],
+ pconfig->r_data_tbl[i][j + 1]);
+ rkisp1_write(params->rkisp1, data,
+ RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
+
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
+ pconfig->gr_data_tbl[i][j],
+ pconfig->gr_data_tbl[i][j + 1]);
+ rkisp1_write(params->rkisp1, data,
+ RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
+
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
+ pconfig->gb_data_tbl[i][j],
+ pconfig->gb_data_tbl[i][j + 1]);
+ rkisp1_write(params->rkisp1, data,
+ RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
+
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
+ pconfig->b_data_tbl[i][j],
+ pconfig->b_data_tbl[i][j + 1]);
+ rkisp1_write(params->rkisp1, data,
+ RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
+ }
+
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->r_data_tbl[i][j], 0);
+ rkisp1_write(params->rkisp1, data,
+ RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
+
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->gr_data_tbl[i][j], 0);
+ rkisp1_write(params->rkisp1, data,
+ RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
+
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->gb_data_tbl[i][j], 0);
+ rkisp1_write(params->rkisp1, data,
+ RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
+
+ data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->b_data_tbl[i][j], 0);
+ rkisp1_write(params->rkisp1, data,
+ RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
+ }
+ isp_lsc_table_sel = (isp_lsc_status & RKISP1_CIF_ISP_LSC_ACTIVE_TABLE) ?
+ RKISP1_CIF_ISP_LSC_TABLE_0 :
+ RKISP1_CIF_ISP_LSC_TABLE_1;
+ rkisp1_write(params->rkisp1, isp_lsc_table_sel,
+ RKISP1_CIF_ISP_LSC_TABLE_SEL);
+}
+
static void rkisp1_lsc_config(struct rkisp1_params *params,
const struct rkisp1_cif_isp_lsc_config *arg)
{
@@ -396,6 +468,25 @@ static void rkisp1_goc_config_v10(struct rkisp1_params *params,
RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V10 + i * 4);
}
+static void rkisp1_goc_config_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_goc_config *arg)
+{
+ unsigned int i;
+ u32 value;
+
+ rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
+ RKISP1_CIF_ISP_CTRL_ISP_GAMMA_OUT_ENA);
+ rkisp1_write(params->rkisp1, arg->mode, RKISP1_CIF_ISP_GAMMA_OUT_MODE_V12);
+
+ for (i = 0; i < RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V12 / 2; i++) {
+ value = RKISP1_CIF_ISP_GAMMA_VALUE_V12(
+ arg->gamma_y[2 * i + 1],
+ arg->gamma_y[2 * i]);
+ rkisp1_write(params->rkisp1, value,
+ RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V12 + i * 4);
+ }
+}
+
/* ISP Cross Talk */
static void rkisp1_ctk_config(struct rkisp1_params *params,
const struct rkisp1_cif_isp_ctk_config *arg)
@@ -473,6 +564,45 @@ static void rkisp1_awb_meas_config_v10(struct rkisp1_params *params,
arg->frames, RKISP1_CIF_ISP_AWB_FRAMES_V10);
}
+static void rkisp1_awb_meas_config_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_meas_config *arg)
+{
+ u32 reg_val = 0;
+ /* based on the mode,configure the awb module */
+ if (arg->awb_mode == RKISP1_CIF_ISP_AWB_MODE_YCBCR) {
+ /* Reference Cb and Cr */
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_AWB_REF_CR_SET(arg->awb_ref_cr) |
+ arg->awb_ref_cb, RKISP1_CIF_ISP_AWB_REF_V12);
+ /* Yc Threshold */
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_AWB_MAX_Y_SET(arg->max_y) |
+ RKISP1_CIF_ISP_AWB_MIN_Y_SET(arg->min_y) |
+ RKISP1_CIF_ISP_AWB_MAX_CS_SET(arg->max_csum) |
+ arg->min_c, RKISP1_CIF_ISP_AWB_THRESH_V12);
+ }
+
+ reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V12);
+ if (arg->enable_ymax_cmp)
+ reg_val |= RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
+ else
+ reg_val &= ~RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
+ reg_val &= ~RKISP1_CIF_ISP_AWB_SET_FRAMES_MASK_V12;
+ reg_val |= RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(arg->frames);
+ rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
+
+ /* window offset */
+ rkisp1_write(params->rkisp1,
+ arg->awb_wnd.v_offs << 16 |
+ arg->awb_wnd.h_offs,
+ RKISP1_CIF_ISP_AWB_OFFS_V12);
+ /* AWB window size */
+ rkisp1_write(params->rkisp1,
+ arg->awb_wnd.v_size << 16 |
+ arg->awb_wnd.h_size,
+ RKISP1_CIF_ISP_AWB_SIZE_V12);
+}
+
static void
rkisp1_awb_meas_enable_v10(struct rkisp1_params *params,
const struct rkisp1_cif_isp_awb_meas_config *arg,
@@ -502,6 +632,35 @@ rkisp1_awb_meas_enable_v10(struct rkisp1_params *params,
}
}
+static void
+rkisp1_awb_meas_enable_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_meas_config *arg,
+ bool en)
+{
+ u32 reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V12);
+
+ /* switch off */
+ reg_val &= RKISP1_CIF_ISP_AWB_MODE_MASK_NONE;
+
+ if (en) {
+ if (arg->awb_mode == RKISP1_CIF_ISP_AWB_MODE_RGB)
+ reg_val |= RKISP1_CIF_ISP_AWB_MODE_RGB_EN;
+ else
+ reg_val |= RKISP1_CIF_ISP_AWB_MODE_YCBCR_EN;
+
+ rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
+
+ /* Measurements require AWB block be active. */
+ rkisp1_param_set_bits(params, RKISP1_CIF_ISP_CTRL,
+ RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
+ } else {
+ rkisp1_write(params->rkisp1,
+ reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
+ rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
+ RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
+ }
+}
+
static void
rkisp1_awb_gain_config_v10(struct rkisp1_params *params,
const struct rkisp1_cif_isp_awb_gain_config *arg)
@@ -515,6 +674,19 @@ rkisp1_awb_gain_config_v10(struct rkisp1_params *params,
arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB_V10);
}
+static void
+rkisp1_awb_gain_config_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_awb_gain_config *arg)
+{
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_green_r) |
+ arg->gain_green_b, RKISP1_CIF_ISP_AWB_GAIN_G_V12);
+
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_red) |
+ arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB_V12);
+}
+
static void rkisp1_aec_config_v10(struct rkisp1_params *params,
const struct rkisp1_cif_isp_aec_config *arg)
{
@@ -548,6 +720,38 @@ static void rkisp1_aec_config_v10(struct rkisp1_params *params,
RKISP1_CIF_ISP_EXP_V_SIZE_V10);
}
+static void rkisp1_aec_config_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_aec_config *arg)
+{
+ u32 exp_ctrl;
+ u32 block_hsize, block_vsize;
+ u32 wnd_num_idx = 1;
+ const u32 ae_wnd_num[] = { 5, 9, 15, 15 };
+
+ /* avoid to override the old enable value */
+ exp_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_EXP_CTRL);
+ exp_ctrl &= RKISP1_CIF_ISP_EXP_ENA;
+ if (arg->autostop)
+ exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_AUTOSTOP;
+ if (arg->mode == RKISP1_CIF_ISP_EXP_MEASURING_MODE_1)
+ exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_MEASMODE_1;
+ exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_WNDNUM_SET_V12(wnd_num_idx);
+ rkisp1_write(params->rkisp1, exp_ctrl, RKISP1_CIF_ISP_EXP_CTRL);
+
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V12(arg->meas_window.v_offs) |
+ RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V12(arg->meas_window.h_offs),
+ RKISP1_CIF_ISP_EXP_OFFS_V12);
+
+ block_hsize = arg->meas_window.h_size / ae_wnd_num[wnd_num_idx] - 1;
+ block_vsize = arg->meas_window.v_size / ae_wnd_num[wnd_num_idx] - 1;
+
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_EXP_V_SIZE_SET_V12(block_vsize) |
+ RKISP1_CIF_ISP_EXP_H_SIZE_SET_V12(block_hsize),
+ RKISP1_CIF_ISP_EXP_SIZE_V12);
+}
+
static void rkisp1_cproc_config(struct rkisp1_params *params,
const struct rkisp1_cif_isp_cproc_config *arg)
{
@@ -625,6 +829,64 @@ static void rkisp1_hst_config_v10(struct rkisp1_params *params,
rkisp1_write(params->rkisp1, weight[0] & 0x1F, RKISP1_CIF_ISP_HIST_WEIGHT_44_V10);
}
+static void rkisp1_hst_config_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_hst_config *arg)
+{
+ unsigned int i, j;
+ u32 block_hsize, block_vsize;
+ u32 wnd_num_idx, hist_weight_num, hist_ctrl, value;
+ u8 weight15x15[RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12];
+ const u32 hist_wnd_num[] = { 5, 9, 15, 15 };
+
+ /* now we just support 9x9 window */
+ wnd_num_idx = 1;
+ memset(weight15x15, 0x00, sizeof(weight15x15));
+ /* avoid to override the old enable value */
+ hist_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_HIST_CTRL_V12);
+ hist_ctrl &= RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 |
+ RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12;
+ hist_ctrl = hist_ctrl |
+ RKISP1_CIF_ISP_HIST_CTRL_INTRSEL_SET_V12(1) |
+ RKISP1_CIF_ISP_HIST_CTRL_DATASEL_SET_V12(0) |
+ RKISP1_CIF_ISP_HIST_CTRL_WATERLINE_SET_V12(0) |
+ RKISP1_CIF_ISP_HIST_CTRL_AUTOSTOP_SET_V12(0) |
+ RKISP1_CIF_ISP_HIST_CTRL_WNDNUM_SET_V12(1) |
+ RKISP1_CIF_ISP_HIST_CTRL_STEPSIZE_SET_V12(arg->histogram_predivider);
+ rkisp1_write(params->rkisp1, hist_ctrl, RKISP1_CIF_ISP_HIST_CTRL_V12);
+
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_HIST_OFFS_SET_V12(arg->meas_window.h_offs,
+ arg->meas_window.v_offs),
+ RKISP1_CIF_ISP_HIST_OFFS_V12);
+
+ block_hsize = arg->meas_window.h_size / hist_wnd_num[wnd_num_idx] - 1;
+ block_vsize = arg->meas_window.v_size / hist_wnd_num[wnd_num_idx] - 1;
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_HIST_SIZE_SET_V12(block_hsize, block_vsize),
+ RKISP1_CIF_ISP_HIST_SIZE_V12);
+
+ for (i = 0; i < hist_wnd_num[wnd_num_idx]; i++) {
+ for (j = 0; j < hist_wnd_num[wnd_num_idx]; j++) {
+ weight15x15[i * RKISP1_CIF_ISP_HIST_ROW_NUM_V12 + j] =
+ arg->hist_weight[i * hist_wnd_num[wnd_num_idx] + j];
+ }
+ }
+
+ hist_weight_num = RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12;
+ for (i = 0; i < (hist_weight_num / 4); i++) {
+ value = RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(
+ weight15x15[4 * i + 0],
+ weight15x15[4 * i + 1],
+ weight15x15[4 * i + 2],
+ weight15x15[4 * i + 3]);
+ rkisp1_write(params->rkisp1, value,
+ RKISP1_CIF_ISP_HIST_WEIGHT_V12 + 4 * i);
+ }
+ value = RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(weight15x15[4 * i + 0], 0, 0, 0);
+ rkisp1_write(params->rkisp1, value,
+ RKISP1_CIF_ISP_HIST_WEIGHT_V12 + 4 * i);
+}
+
static void
rkisp1_hst_enable_v10(struct rkisp1_params *params,
const struct rkisp1_cif_isp_hst_config *arg, bool en)
@@ -643,6 +905,26 @@ rkisp1_hst_enable_v10(struct rkisp1_params *params,
}
}
+static void
+rkisp1_hst_enable_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_hst_config *arg, bool en)
+{
+ if (en) {
+ u32 hist_ctrl = rkisp1_read(params->rkisp1,
+ RKISP1_CIF_ISP_HIST_CTRL_V12);
+
+ hist_ctrl &= ~RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12;
+ hist_ctrl |= RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(arg->mode);
+ hist_ctrl |= RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(1);
+ rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_CTRL_V12,
+ hist_ctrl);
+ } else {
+ rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_HIST_CTRL_V12,
+ RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 |
+ RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12);
+ }
+}
+
static void rkisp1_afm_config_v10(struct rkisp1_params *params,
const struct rkisp1_cif_isp_afc_config *arg)
{
@@ -674,6 +956,45 @@ static void rkisp1_afm_config_v10(struct rkisp1_params *params,
rkisp1_write(params->rkisp1, afm_ctrl, RKISP1_CIF_ISP_AFM_CTRL);
}
+static void rkisp1_afm_config_v12(struct rkisp1_params *params,
+ const struct rkisp1_cif_isp_afc_config *arg)
+{
+ size_t num_of_win = min_t(size_t, ARRAY_SIZE(arg->afm_win),
+ arg->num_afm_win);
+ u32 afm_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AFM_CTRL);
+ u32 lum_var_shift, afm_var_shift;
+ unsigned int i;
+
+ /* Switch off to configure. */
+ rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
+ RKISP1_CIF_ISP_AFM_ENA);
+
+ for (i = 0; i < num_of_win; i++) {
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_AFM_WINDOW_X(arg->afm_win[i].h_offs) |
+ RKISP1_CIF_ISP_AFM_WINDOW_Y(arg->afm_win[i].v_offs),
+ RKISP1_CIF_ISP_AFM_LT_A + i * 8);
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_AFM_WINDOW_X(arg->afm_win[i].h_size +
+ arg->afm_win[i].h_offs) |
+ RKISP1_CIF_ISP_AFM_WINDOW_Y(arg->afm_win[i].v_size +
+ arg->afm_win[i].v_offs),
+ RKISP1_CIF_ISP_AFM_RB_A + i * 8);
+ }
+ rkisp1_write(params->rkisp1, arg->thres, RKISP1_CIF_ISP_AFM_THRES);
+
+ lum_var_shift = RKISP1_CIF_ISP_AFM_GET_LUM_SHIFT_a_V12(arg->var_shift);
+ afm_var_shift = RKISP1_CIF_ISP_AFM_GET_AFM_SHIFT_a_V12(arg->var_shift);
+ rkisp1_write(params->rkisp1,
+ RKISP1_CIF_ISP_AFM_SET_SHIFT_a_V12(lum_var_shift, afm_var_shift) |
+ RKISP1_CIF_ISP_AFM_SET_SHIFT_b_V12(lum_var_shift, afm_var_shift) |
+ RKISP1_CIF_ISP_AFM_SET_SHIFT_c_V12(lum_var_shift, afm_var_shift),
+ RKISP1_CIF_ISP_AFM_VAR_SHIFT);
+
+ /* restore afm status */
+ rkisp1_write(params->rkisp1, afm_ctrl, RKISP1_CIF_ISP_AFM_CTRL);
+}
+
static void rkisp1_ie_config(struct rkisp1_params *params,
const struct rkisp1_cif_isp_ie_config *arg)
{
@@ -1305,6 +1626,18 @@ static struct rkisp1_params_ops rkisp1_v10_params_ops = {
.afm_config = rkisp1_afm_config_v10,
};
+static struct rkisp1_params_ops rkisp1_v12_params_ops = {
+ .lsc_matrix_config = rkisp1_lsc_matrix_config_v12,
+ .goc_config = rkisp1_goc_config_v12,
+ .awb_meas_config = rkisp1_awb_meas_config_v12,
+ .awb_meas_enable = rkisp1_awb_meas_enable_v12,
+ .awb_gain_config = rkisp1_awb_gain_config_v12,
+ .aec_config = rkisp1_aec_config_v12,
+ .hst_config = rkisp1_hst_config_v12,
+ .hst_enable = rkisp1_hst_enable_v12,
+ .afm_config = rkisp1_afm_config_v12,
+};
+
static int rkisp1_params_enum_fmt_meta_out(struct file *file, void *priv,
struct v4l2_fmtdesc *f)
{
@@ -1472,7 +1805,10 @@ static void rkisp1_init_params(struct rkisp1_params *params)
params->vdev_fmt.fmt.meta.buffersize =
sizeof(struct rkisp1_params_cfg);
- params->ops = &rkisp1_v10_params_ops;
+ if (params->rkisp1->media_dev.hw_revision == RKISP1_V12)
+ params->ops = &rkisp1_v12_params_ops;
+ else
+ params->ops = &rkisp1_v10_params_ops;
}
int rkisp1_params_register(struct rkisp1_device *rkisp1)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
index c71ccd148bde..d326214c7e07 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
@@ -396,6 +396,38 @@
#define RKISP1_CIF_ISP_HIST_COLUMN_NUM_V10 5
#define RKISP1_CIF_ISP_HIST_GET_BIN_V10(x) ((x) & 0x000FFFFF)
+/* ISP HISTOGRAM CALCULATION : CIF_ISP_HIST */
+#define RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(x) (((x) & 0x01) << 0)
+#define RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12 RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(0x01)
+#define RKISP1_CIF_ISP_HIST_CTRL_STEPSIZE_SET_V12(x) (((x) & 0x7F) << 1)
+#define RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(x) (((x) & 0x07) << 8)
+#define RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(0x07)
+#define RKISP1_CIF_ISP_HIST_CTRL_AUTOSTOP_SET_V12(x) (((x) & 0x01) << 11)
+#define RKISP1_CIF_ISP_HIST_CTRL_WATERLINE_SET_V12(x) (((x) & 0xFFF) << 12)
+#define RKISP1_CIF_ISP_HIST_CTRL_DATASEL_SET_V12(x) (((x) & 0x07) << 24)
+#define RKISP1_CIF_ISP_HIST_CTRL_INTRSEL_SET_V12(x) (((x) & 0x01) << 27)
+#define RKISP1_CIF_ISP_HIST_CTRL_WNDNUM_SET_V12(x) (((x) & 0x03) << 28)
+#define RKISP1_CIF_ISP_HIST_CTRL_DBGEN_SET_V12(x) (((x) & 0x01) << 30)
+#define RKISP1_CIF_ISP_HIST_ROW_NUM_V12 15
+#define RKISP1_CIF_ISP_HIST_COLUMN_NUM_V12 15
+#define RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12 \
+ (RKISP1_CIF_ISP_HIST_ROW_NUM_V12 * RKISP1_CIF_ISP_HIST_COLUMN_NUM_V12)
+
+#define RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(v0, v1, v2, v3) \
+ (((v0) & 0x3F) | (((v1) & 0x3F) << 8) |\
+ (((v2) & 0x3F) << 16) |\
+ (((v3) & 0x3F) << 24))
+
+#define RKISP1_CIF_ISP_HIST_OFFS_SET_V12(v0, v1) \
+ (((v0) & 0x1FFF) | (((v1) & 0x1FFF) << 16))
+#define RKISP1_CIF_ISP_HIST_SIZE_SET_V12(v0, v1) \
+ (((v0) & 0x7FF) | (((v1) & 0x7FF) << 16))
+
+#define RKISP1_CIF_ISP_HIST_GET_BIN0_V12(x) \
+ ((x) & 0xFFFF)
+#define RKISP1_CIF_ISP_HIST_GET_BIN1_V12(x) \
+ (((x) >> 16) & 0xFFFF)
+
/* AUTO FOCUS MEASUREMENT: ISP_AFM_CTRL */
#define RKISP1_ISP_AFM_CTRL_ENABLE BIT(0)
@@ -430,6 +462,8 @@
#define RKISP1_CIF_ISP_AWB_MODE_YCBCR_EN ((0 << 31) | (0x2 << 0))
#define RKISP1_CIF_ISP_AWB_MODE_MASK_NONE 0xFFFFFFFC
#define RKISP1_CIF_ISP_AWB_MODE_READ(x) ((x) & 3)
+#define RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(x) (((x) & 0x07) << 28)
+#define RKISP1_CIF_ISP_AWB_SET_FRAMES_MASK_V12 RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(0x07)
/* ISP_AWB_GAIN_RB, ISP_AWB_GAIN_G */
#define RKISP1_CIF_ISP_AWB_GAIN_R_SET(x) (((x) & 0x3FF) << 16)
#define RKISP1_CIF_ISP_AWB_GAIN_R_READ(x) (((x) >> 16) & 0x3FF)
@@ -464,6 +498,7 @@
/* ISP_EXP_CTRL */
#define RKISP1_CIF_ISP_EXP_ENA BIT(0)
#define RKISP1_CIF_ISP_EXP_CTRL_AUTOSTOP BIT(1)
+#define RKISP1_CIF_ISP_EXP_CTRL_WNDNUM_SET_V12(x) (((x) & 0x03) << 2)
/*
*'1' luminance calculation according to Y=(R+G+B) x 0.332 (85/256)
*'0' luminance calculation according to Y=16+0.25R+0.5G+0.1094B
@@ -473,15 +508,22 @@
/* ISP_EXP_H_SIZE */
#define RKISP1_CIF_ISP_EXP_H_SIZE_SET_V10(x) ((x) & 0x7FF)
#define RKISP1_CIF_ISP_EXP_HEIGHT_MASK_V10 0x000007FF
+#define RKISP1_CIF_ISP_EXP_H_SIZE_SET_V12(x) ((x) & 0x7FF)
+#define RKISP1_CIF_ISP_EXP_HEIGHT_MASK_V12 0x000007FF
/* ISP_EXP_V_SIZE : vertical size must be a multiple of 2). */
#define RKISP1_CIF_ISP_EXP_V_SIZE_SET_V10(x) ((x) & 0x7FE)
+#define RKISP1_CIF_ISP_EXP_V_SIZE_SET_V12(x) (((x) & 0x7FE) << 16)
/* ISP_EXP_H_OFFSET */
#define RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V10(x) ((x) & 0x1FFF)
#define RKISP1_CIF_ISP_EXP_MAX_HOFFS_V10 2424
+#define RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V12(x) ((x) & 0x1FFF)
+#define RKISP1_CIF_ISP_EXP_MAX_HOFFS_V12 0x1FFF
/* ISP_EXP_V_OFFSET */
#define RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V10(x) ((x) & 0x1FFF)
#define RKISP1_CIF_ISP_EXP_MAX_VOFFS_V10 1806
+#define RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V12(x) (((x) & 0x1FFF) << 16)
+#define RKISP1_CIF_ISP_EXP_MAX_VOFFS_V12 0x1FFF
#define RKISP1_CIF_ISP_EXP_ROW_NUM_V10 5
#define RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 5
@@ -500,13 +542,40 @@
#define RKISP1_CIF_ISP_EXP_MIN_VSIZE_V10 \
(RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V10 * RKISP1_CIF_ISP_EXP_ROW_NUM_V10 + 1)
+#define RKISP1_CIF_ISP_EXP_ROW_NUM_V12 15
+#define RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 15
+#define RKISP1_CIF_ISP_EXP_NUM_LUMA_REGS_V12 \
+ (RKISP1_CIF_ISP_EXP_ROW_NUM_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12)
+
+#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V12 0x7FF
+#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V12 0xE
+#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V12 0x7FE
+#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V12 0xE
+#define RKISP1_CIF_ISP_EXP_MAX_HSIZE_V12 \
+ (RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 + 1)
+#define RKISP1_CIF_ISP_EXP_MIN_HSIZE_V12 \
+ (RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 + 1)
+#define RKISP1_CIF_ISP_EXP_MAX_VSIZE_V12 \
+ (RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V12 * RKISP1_CIF_ISP_EXP_ROW_NUM_V12 + 1)
+#define RKISP1_CIF_ISP_EXP_MIN_VSIZE_V12 \
+ (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V12 * RKISP1_CIF_ISP_EXP_ROW_NUM_V12 + 1)
+
+#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(x) ((x) & 0xFF)
+#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy1_V12(x) (((x) >> 8) & 0xFF)
+#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy2_V12(x) (((x) >> 16) & 0xFF)
+#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy3_V12(x) (((x) >> 24) & 0xFF)
+
/* LSC: ISP_LSC_CTRL */
#define RKISP1_CIF_ISP_LSC_CTRL_ENA BIT(0)
#define RKISP1_CIF_ISP_LSC_SECT_SIZE_RESERVED 0xFC00FC00
#define RKISP1_CIF_ISP_LSC_GRAD_RESERVED_V10 0xF000F000
#define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED_V10 0xF000F000
+#define RKISP1_CIF_ISP_LSC_GRAD_RESERVED_V12 0xE000E000
+#define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED_V12 0xE000E000
#define RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(v0, v1) \
(((v0) & 0xFFF) | (((v1) & 0xFFF) << 12))
+#define RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(v0, v1) \
+ (((v0) & 0x1FFF) | (((v1) & 0x1FFF) << 13))
#define RKISP1_CIF_ISP_LSC_SECT_SIZE(v0, v1) \
(((v0) & 0xFFF) | (((v1) & 0xFFF) << 16))
#define RKISP1_CIF_ISP_LSC_GRAD_SIZE(v0, v1) \
@@ -579,6 +648,10 @@
(1 << 15) | (1 << 11) | (1 << 7) | (1 << 3))
#define RKISP1_CIFISP_DEGAMMA_Y_RESERVED 0xFFFFF000
+/* GAMMA-OUT */
+#define RKISP1_CIF_ISP_GAMMA_VALUE_V12(x, y) \
+ (((x) & 0xFFF) << 16 | ((y) & 0xFFF) << 0)
+
/* AFM */
#define RKISP1_CIF_ISP_AFM_ENA BIT(0)
#define RKISP1_CIF_ISP_AFM_THRES_RESERVED 0xFFFF0000
@@ -589,6 +662,11 @@
#define RKISP1_CIF_ISP_AFM_WINDOW_Y_MIN 0x2
#define RKISP1_CIF_ISP_AFM_WINDOW_X(x) (((x) & 0x1FFF) << 16)
#define RKISP1_CIF_ISP_AFM_WINDOW_Y(x) ((x) & 0x1FFF)
+#define RKISP1_CIF_ISP_AFM_SET_SHIFT_a_V12(x, y) (((x) & 0x7) << 16 | ((y) & 0x7) << 0)
+#define RKISP1_CIF_ISP_AFM_SET_SHIFT_b_V12(x, y) (((x) & 0x7) << 20 | ((y) & 0x7) << 4)
+#define RKISP1_CIF_ISP_AFM_SET_SHIFT_c_V12(x, y) (((x) & 0x7) << 24 | ((y) & 0x7) << 8)
+#define RKISP1_CIF_ISP_AFM_GET_LUM_SHIFT_a_V12(x) (((x) & 0x70000) >> 16)
+#define RKISP1_CIF_ISP_AFM_GET_AFM_SHIFT_a_V12(x) ((x) & 0x7)
/* DPF */
#define RKISP1_CIF_ISP_DPF_MODE_EN BIT(0)
@@ -611,6 +689,7 @@
#define RKISP1_CIF_CTRL_BASE 0x00000000
#define RKISP1_CIF_CCL (RKISP1_CIF_CTRL_BASE + 0x00000000)
#define RKISP1_CIF_VI_ID (RKISP1_CIF_CTRL_BASE + 0x00000008)
+#define RKISP1_CIF_VI_ISP_CLK_CTRL_V12 (RKISP1_CIF_CTRL_BASE + 0x0000000C)
#define RKISP1_CIF_ICCL (RKISP1_CIF_CTRL_BASE + 0x00000010)
#define RKISP1_CIF_IRCL (RKISP1_CIF_CTRL_BASE + 0x00000014)
#define RKISP1_CIF_VI_DPCL (RKISP1_CIF_CTRL_BASE + 0x00000018)
@@ -708,6 +787,23 @@
#define RKISP1_CIF_ISP_AWB_GAIN_RB_V10 (RKISP1_CIF_ISP_BASE + 0x0000013C)
#define RKISP1_CIF_ISP_AWB_WHITE_CNT_V10 (RKISP1_CIF_ISP_BASE + 0x00000140)
#define RKISP1_CIF_ISP_AWB_MEAN_V10 (RKISP1_CIF_ISP_BASE + 0x00000144)
+#define RKISP1_CIF_ISP_AWB_PROP_V12 (RKISP1_CIF_ISP_BASE + 0x00000110)
+#define RKISP1_CIF_ISP_AWB_SIZE_V12 (RKISP1_CIF_ISP_BASE + 0x00000114)
+#define RKISP1_CIF_ISP_AWB_OFFS_V12 (RKISP1_CIF_ISP_BASE + 0x00000118)
+#define RKISP1_CIF_ISP_AWB_REF_V12 (RKISP1_CIF_ISP_BASE + 0x0000011C)
+#define RKISP1_CIF_ISP_AWB_THRESH_V12 (RKISP1_CIF_ISP_BASE + 0x00000120)
+#define RKISP1_CIF_ISP_X_COOR12_V12 (RKISP1_CIF_ISP_BASE + 0x00000124)
+#define RKISP1_CIF_ISP_X_COOR34_V12 (RKISP1_CIF_ISP_BASE + 0x00000128)
+#define RKISP1_CIF_ISP_AWB_WHITE_CNT_V12 (RKISP1_CIF_ISP_BASE + 0x0000012C)
+#define RKISP1_CIF_ISP_AWB_MEAN_V12 (RKISP1_CIF_ISP_BASE + 0x00000130)
+#define RKISP1_CIF_ISP_DEGAIN_V12 (RKISP1_CIF_ISP_BASE + 0x00000134)
+#define RKISP1_CIF_ISP_AWB_GAIN_G_V12 (RKISP1_CIF_ISP_BASE + 0x00000138)
+#define RKISP1_CIF_ISP_AWB_GAIN_RB_V12 (RKISP1_CIF_ISP_BASE + 0x0000013C)
+#define RKISP1_CIF_ISP_REGION_LINE_V12 (RKISP1_CIF_ISP_BASE + 0x00000140)
+#define RKISP1_CIF_ISP_WP_CNT_REGION0_V12 (RKISP1_CIF_ISP_BASE + 0x00000160)
+#define RKISP1_CIF_ISP_WP_CNT_REGION1_V12 (RKISP1_CIF_ISP_BASE + 0x00000164)
+#define RKISP1_CIF_ISP_WP_CNT_REGION2_V12 (RKISP1_CIF_ISP_BASE + 0x00000168)
+#define RKISP1_CIF_ISP_WP_CNT_REGION3_V12 (RKISP1_CIF_ISP_BASE + 0x0000016C)
#define RKISP1_CIF_ISP_CC_COEFF_0 (RKISP1_CIF_ISP_BASE + 0x00000170)
#define RKISP1_CIF_ISP_CC_COEFF_1 (RKISP1_CIF_ISP_BASE + 0x00000174)
#define RKISP1_CIF_ISP_CC_COEFF_2 (RKISP1_CIF_ISP_BASE + 0x00000178)
@@ -765,6 +861,8 @@
#define RKISP1_CIF_ISP_CT_OFFSET_R (RKISP1_CIF_ISP_BASE + 0x00000248)
#define RKISP1_CIF_ISP_CT_OFFSET_G (RKISP1_CIF_ISP_BASE + 0x0000024C)
#define RKISP1_CIF_ISP_CT_OFFSET_B (RKISP1_CIF_ISP_BASE + 0x00000250)
+#define RKISP1_CIF_ISP_GAMMA_OUT_MODE_V12 (RKISP1_CIF_ISP_BASE + 0x00000300)
+#define RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V12 (RKISP1_CIF_ISP_BASE + 0x00000304)
#define RKISP1_CIF_ISP_FLASH_BASE 0x00000660
#define RKISP1_CIF_ISP_FLASH_CMD (RKISP1_CIF_ISP_FLASH_BASE + 0x00000000)
@@ -1117,6 +1215,9 @@
#define RKISP1_CIF_ISP_EXP_MEAN_24_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000006c)
#define RKISP1_CIF_ISP_EXP_MEAN_34_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000070)
#define RKISP1_CIF_ISP_EXP_MEAN_44_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000074)
+#define RKISP1_CIF_ISP_EXP_SIZE_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x00000004)
+#define RKISP1_CIF_ISP_EXP_OFFS_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x00000008)
+#define RKISP1_CIF_ISP_EXP_MEAN_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x0000000c)
#define RKISP1_CIF_ISP_BLS_BASE 0x00002700
#define RKISP1_CIF_ISP_BLS_CTRL (RKISP1_CIF_ISP_BLS_BASE + 0x00000000)
@@ -1277,6 +1378,16 @@
#define RKISP1_CIF_ISP_WDR_TONECURVE_YM_31_SHD (RKISP1_CIF_ISP_WDR_BASE + 0x0000012C)
#define RKISP1_CIF_ISP_WDR_TONECURVE_YM_32_SHD (RKISP1_CIF_ISP_WDR_BASE + 0x00000130)
+#define RKISP1_CIF_ISP_HIST_BASE_V12 0x00002C00
+#define RKISP1_CIF_ISP_HIST_CTRL_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000000)
+#define RKISP1_CIF_ISP_HIST_SIZE_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000004)
+#define RKISP1_CIF_ISP_HIST_OFFS_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000008)
+#define RKISP1_CIF_ISP_HIST_DBG1_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000000C)
+#define RKISP1_CIF_ISP_HIST_DBG2_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000001C)
+#define RKISP1_CIF_ISP_HIST_DBG3_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000002C)
+#define RKISP1_CIF_ISP_HIST_WEIGHT_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000003C)
+#define RKISP1_CIF_ISP_HIST_BIN_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000120)
+
#define RKISP1_CIF_ISP_VSM_BASE 0x00002F00
#define RKISP1_CIF_ISP_VSM_MODE (RKISP1_CIF_ISP_VSM_BASE + 0x00000000)
#define RKISP1_CIF_ISP_VSM_H_OFFS (RKISP1_CIF_ISP_VSM_BASE + 0x00000004)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
index 3f286c55ad60..dd99d7ea9ff6 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
@@ -196,6 +196,27 @@ static void rkisp1_stats_get_awb_meas_v10(struct rkisp1_stats *stats,
RKISP1_CIF_ISP_AWB_GET_MEAN_Y_G(reg_val);
}
+static void rkisp1_stats_get_awb_meas_v12(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf)
+{
+ /* Protect against concurrent access from ISR? */
+ struct rkisp1_device *rkisp1 = stats->rkisp1;
+ u32 reg_val;
+
+ pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AWB;
+ reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_WHITE_CNT_V12);
+ pbuf->params.awb.awb_mean[0].cnt =
+ RKISP1_CIF_ISP_AWB_GET_PIXEL_CNT(reg_val);
+ reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_MEAN_V12);
+
+ pbuf->params.awb.awb_mean[0].mean_cr_or_r =
+ RKISP1_CIF_ISP_AWB_GET_MEAN_CR_R(reg_val);
+ pbuf->params.awb.awb_mean[0].mean_cb_or_b =
+ RKISP1_CIF_ISP_AWB_GET_MEAN_CB_B(reg_val);
+ pbuf->params.awb.awb_mean[0].mean_y_or_g =
+ RKISP1_CIF_ISP_AWB_GET_MEAN_Y_G(reg_val);
+}
+
static void rkisp1_stats_get_aec_meas_v10(struct rkisp1_stats *stats,
struct rkisp1_stat_buffer *pbuf)
{
@@ -209,6 +230,30 @@ static void rkisp1_stats_get_aec_meas_v10(struct rkisp1_stats *stats,
RKISP1_CIF_ISP_EXP_MEAN_00_V10 + i * 4);
}
+static void rkisp1_stats_get_aec_meas_v12(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf)
+{
+ struct rkisp1_device *rkisp1 = stats->rkisp1;
+ u32 value;
+ int i;
+
+ pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AUTOEXP;
+ for (i = 0; i < RKISP1_CIF_ISP_AE_MEAN_MAX_V12 / 4; i++) {
+ value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_EXP_MEAN_V12 + i * 4);
+ pbuf->params.ae.exp_mean[4 * i + 0] =
+ RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(value);
+ pbuf->params.ae.exp_mean[4 * i + 1] =
+ RKISP1_CIF_ISP_EXP_GET_MEAN_xy1_V12(value);
+ pbuf->params.ae.exp_mean[4 * i + 2] =
+ RKISP1_CIF_ISP_EXP_GET_MEAN_xy2_V12(value);
+ pbuf->params.ae.exp_mean[4 * i + 3] =
+ RKISP1_CIF_ISP_EXP_GET_MEAN_xy3_V12(value);
+ }
+
+ value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_EXP_MEAN_V12 + i * 4);
+ pbuf->params.ae.exp_mean[4 * i + 0] = RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(value);
+}
+
static void rkisp1_stats_get_afc_meas(struct rkisp1_stats *stats,
struct rkisp1_stat_buffer *pbuf)
{
@@ -240,6 +285,23 @@ static void rkisp1_stats_get_hst_meas_v10(struct rkisp1_stats *stats,
}
}
+static void rkisp1_stats_get_hst_meas_v12(struct rkisp1_stats *stats,
+ struct rkisp1_stat_buffer *pbuf)
+{
+ struct rkisp1_device *rkisp1 = stats->rkisp1;
+ u32 value;
+ int i;
+
+ pbuf->meas_type |= RKISP1_CIF_ISP_STAT_HIST;
+ for (i = 0; i < RKISP1_CIF_ISP_HIST_BIN_N_MAX_V12 / 2; i++) {
+ value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_HIST_BIN_V12 + i * 4);
+ pbuf->params.hist.hist_bins[2 * i] =
+ RKISP1_CIF_ISP_HIST_GET_BIN0_V12(value);
+ pbuf->params.hist.hist_bins[2 * i + 1] =
+ RKISP1_CIF_ISP_HIST_GET_BIN1_V12(value);
+ }
+}
+
static void rkisp1_stats_get_bls_meas(struct rkisp1_stats *stats,
struct rkisp1_stat_buffer *pbuf)
{
@@ -293,6 +355,12 @@ static struct rkisp1_stats_ops rkisp1_v10_stats_ops = {
.get_hst_meas = rkisp1_stats_get_hst_meas_v10,
};
+static struct rkisp1_stats_ops rkisp1_v12_stats_ops = {
+ .get_awb_meas = rkisp1_stats_get_awb_meas_v12,
+ .get_aec_meas = rkisp1_stats_get_aec_meas_v12,
+ .get_hst_meas = rkisp1_stats_get_hst_meas_v12,
+};
+
static void
rkisp1_stats_send_measurement(struct rkisp1_stats *stats, u32 isp_ris)
{
@@ -361,7 +429,10 @@ static void rkisp1_init_stats(struct rkisp1_stats *stats)
stats->vdev_fmt.fmt.meta.buffersize =
sizeof(struct rkisp1_stat_buffer);
- stats->ops = &rkisp1_v10_stats_ops;
+ if (stats->rkisp1->media_dev.hw_revision == RKISP1_V12)
+ stats->ops = &rkisp1_v12_stats_ops;
+ else
+ stats->ops = &rkisp1_v10_stats_ops;
}
int rkisp1_stats_register(struct rkisp1_device *rkisp1)
--
2.29.2
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v2 7/7] media: rockchip: rkisp1: add support for px30 isp version
2021-06-15 0:37 ` Heiko Stuebner
@ 2021-06-15 0:37 ` Heiko Stuebner
-1 siblings, 0 replies; 38+ messages in thread
From: Heiko Stuebner @ 2021-06-15 0:37 UTC (permalink / raw)
To: mchehab, hverkuil-cisco
Cc: ezequiel, dafna.hirschfeld, helen.koike, Laurent.pinchart,
linux-rockchip, linux-media, heiko, Heiko Stuebner
From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
The px30 uses a V12 isp block so add compatible and matchdata
for it.
Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
---
.../media/platform/rockchip/rkisp1/rkisp1-dev.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
index ddc05189c62a..6e4c0710f3a3 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
@@ -398,6 +398,19 @@ static irqreturn_t rkisp1_isr(int irq, void *ctx)
return IRQ_HANDLED;
}
+static const char * const px30_isp_clks[] = {
+ "isp",
+ "aclk",
+ "hclk",
+ "pclk",
+};
+
+static const struct rkisp1_match_data px30_isp_match_data = {
+ .clks = px30_isp_clks,
+ .size = ARRAY_SIZE(px30_isp_clks),
+ .isp_ver = RKISP1_V12,
+};
+
static const char * const rk3399_isp_clks[] = {
"isp",
"aclk",
@@ -411,6 +424,10 @@ static const struct rkisp1_match_data rk3399_isp_match_data = {
};
static const struct of_device_id rkisp1_of_match[] = {
+ {
+ .compatible = "rockchip,px30-cif-isp",
+ .data = &px30_isp_match_data,
+ },
{
.compatible = "rockchip,rk3399-cif-isp",
.data = &rk3399_isp_match_data,
--
2.29.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v2 7/7] media: rockchip: rkisp1: add support for px30 isp version
@ 2021-06-15 0:37 ` Heiko Stuebner
0 siblings, 0 replies; 38+ messages in thread
From: Heiko Stuebner @ 2021-06-15 0:37 UTC (permalink / raw)
To: mchehab, hverkuil-cisco
Cc: ezequiel, dafna.hirschfeld, helen.koike, Laurent.pinchart,
linux-rockchip, linux-media, heiko, Heiko Stuebner
From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
The px30 uses a V12 isp block so add compatible and matchdata
for it.
Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
---
.../media/platform/rockchip/rkisp1/rkisp1-dev.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
index ddc05189c62a..6e4c0710f3a3 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
@@ -398,6 +398,19 @@ static irqreturn_t rkisp1_isr(int irq, void *ctx)
return IRQ_HANDLED;
}
+static const char * const px30_isp_clks[] = {
+ "isp",
+ "aclk",
+ "hclk",
+ "pclk",
+};
+
+static const struct rkisp1_match_data px30_isp_match_data = {
+ .clks = px30_isp_clks,
+ .size = ARRAY_SIZE(px30_isp_clks),
+ .isp_ver = RKISP1_V12,
+};
+
static const char * const rk3399_isp_clks[] = {
"isp",
"aclk",
@@ -411,6 +424,10 @@ static const struct rkisp1_match_data rk3399_isp_match_data = {
};
static const struct of_device_id rkisp1_of_match[] = {
+ {
+ .compatible = "rockchip,px30-cif-isp",
+ .data = &px30_isp_match_data,
+ },
{
.compatible = "rockchip,rk3399-cif-isp",
.data = &rk3399_isp_match_data,
--
2.29.2
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 38+ messages in thread
* Re: [PATCH v2 2/7] media: rockchip: rkisp1: allow separate interrupts
2021-06-15 0:37 ` Heiko Stuebner
@ 2021-06-15 5:42 ` Dafna Hirschfeld
-1 siblings, 0 replies; 38+ messages in thread
From: Dafna Hirschfeld @ 2021-06-15 5:42 UTC (permalink / raw)
To: Heiko Stuebner, mchehab, hverkuil-cisco
Cc: ezequiel, helen.koike, Laurent.pinchart, linux-rockchip,
linux-media, Heiko Stuebner
Hi,
On 15.06.21 03:37, Heiko Stuebner wrote:
> From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
>
> Depending on the per-soc implementation there can be one interrupt
> for isp, mipi and capture events or separate per-event interrupts.
>
> So simply check for the presence of a named "mi" interrupt
> to differentiate between the two cases.
So in this patch you actually relay on the 'interrupt-names' property added to
the binding right? So I think you should also update the 'rockchip-isp1.yaml' file.
Thanks,
Dafna
>
> Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> ---
> .../platform/rockchip/rkisp1/rkisp1-capture.c | 9 ++-
> .../platform/rockchip/rkisp1/rkisp1-common.h | 7 ++-
> .../platform/rockchip/rkisp1/rkisp1-dev.c | 58 ++++++++++++++-----
> .../platform/rockchip/rkisp1/rkisp1-isp.c | 16 +++--
> 4 files changed, 69 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> index 5f6c9d1623e4..f70c66c2a1d7 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> @@ -685,12 +685,17 @@ static void rkisp1_handle_buffer(struct rkisp1_capture *cap)
> spin_unlock(&cap->buf.lock);
> }
>
> -void rkisp1_capture_isr(struct rkisp1_device *rkisp1)
> +irqreturn_t rkisp1_capture_isr(int irq, void *ctx)
> {
> + struct device *dev = ctx;
> + struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
> unsigned int i;
> u32 status;
>
> status = rkisp1_read(rkisp1, RKISP1_CIF_MI_MIS);
> + if (!status)
> + return IRQ_NONE;
> +
> rkisp1_write(rkisp1, status, RKISP1_CIF_MI_ICR);
>
> for (i = 0; i < ARRAY_SIZE(rkisp1->capture_devs); ++i) {
> @@ -718,6 +723,8 @@ void rkisp1_capture_isr(struct rkisp1_device *rkisp1)
> cap->is_streaming = false;
> wake_up(&cap->done);
> }
> +
> + return IRQ_HANDLED;
> }
>
> /* ----------------------------------------------------------------------------
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> index be8a350c7527..25dd5c93620e 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> @@ -12,6 +12,7 @@
> #define _RKISP1_COMMON_H
>
> #include <linux/clk.h>
> +#include <linux/interrupt.h>
> #include <linux/mutex.h>
> #include <linux/rkisp1-config.h>
> #include <media/media-device.h>
> @@ -459,9 +460,9 @@ void rkisp1_params_configure(struct rkisp1_params *params,
> void rkisp1_params_disable(struct rkisp1_params *params);
>
> /* irq handlers */
> -void rkisp1_isp_isr(struct rkisp1_device *rkisp1);
> -void rkisp1_mipi_isr(struct rkisp1_device *rkisp1);
> -void rkisp1_capture_isr(struct rkisp1_device *rkisp1);
> +irqreturn_t rkisp1_isp_isr(int irq, void *ctx);
> +irqreturn_t rkisp1_mipi_isr(int irq, void *ctx);
> +irqreturn_t rkisp1_capture_isr(int irq, void *ctx);
> void rkisp1_stats_isr(struct rkisp1_stats *stats, u32 isp_ris);
> void rkisp1_params_isr(struct rkisp1_device *rkisp1);
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> index 7afa4c123834..ddc05189c62a 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> @@ -385,18 +385,15 @@ static int rkisp1_entities_register(struct rkisp1_device *rkisp1)
>
> static irqreturn_t rkisp1_isr(int irq, void *ctx)
> {
> - struct device *dev = ctx;
> - struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
> -
> /*
> * Call rkisp1_capture_isr() first to handle the frame that
> * potentially completed using the current frame_sequence number before
> * it is potentially incremented by rkisp1_isp_isr() in the vertical
> * sync.
> */
> - rkisp1_capture_isr(rkisp1);
> - rkisp1_isp_isr(rkisp1);
> - rkisp1_mipi_isr(rkisp1);
> + rkisp1_capture_isr(irq, ctx);
> + rkisp1_isp_isr(irq, ctx);
> + rkisp1_mipi_isr(irq, ctx);
>
> return IRQ_HANDLED;
> }
> @@ -478,15 +475,50 @@ static int rkisp1_probe(struct platform_device *pdev)
> if (IS_ERR(rkisp1->base_addr))
> return PTR_ERR(rkisp1->base_addr);
>
> - irq = platform_get_irq(pdev, 0);
> - if (irq < 0)
> + irq = platform_get_irq_byname_optional(pdev, "mi");
> + if (irq == -EPROBE_DEFER) {
> return irq;
> + } else if (irq < 0) {
> + irq = platform_get_irq(pdev, 0);
> + if (irq < 0)
> + return irq;
> +
> + ret = devm_request_irq(dev, irq, rkisp1_isr, IRQF_SHARED,
> + dev_driver_string(dev), dev);
> + if (ret) {
> + dev_err(dev, "request irq failed: %d\n", ret);
> + return ret;
> + }
> + } else {
> + /* we test-got the MI (capture) interrupt */
> + ret = devm_request_irq(dev, irq, rkisp1_capture_isr, IRQF_SHARED,
> + dev_driver_string(dev), dev);
> + if (ret) {
> + dev_err(dev, "request mi irq failed: %d\n", ret);
> + return ret;
> + }
>
> - ret = devm_request_irq(dev, irq, rkisp1_isr, IRQF_SHARED,
> - dev_driver_string(dev), dev);
> - if (ret) {
> - dev_err(dev, "request irq failed: %d\n", ret);
> - return ret;
> + irq = platform_get_irq_byname_optional(pdev, "mipi");
> + if (irq < 0)
> + return irq;
> +
> + ret = devm_request_irq(dev, irq, rkisp1_mipi_isr, IRQF_SHARED,
> + dev_driver_string(dev), dev);
> + if (ret) {
> + dev_err(dev, "request mipi irq failed: %d\n", ret);
> + return ret;
> + }
> +
> + irq = platform_get_irq_byname_optional(pdev, "isp");
> + if (irq < 0)
> + return irq;
> +
> + ret = devm_request_irq(dev, irq, rkisp1_isp_isr, IRQF_SHARED,
> + dev_driver_string(dev), dev);
> + if (ret) {
> + dev_err(dev, "request isp irq failed: %d\n", ret);
> + return ret;
> + }
> }
>
> for (i = 0; i < match_data->size; i++)
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> index 2e5b57e3aedc..1de98e688008 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> @@ -1090,13 +1090,15 @@ void rkisp1_isp_unregister(struct rkisp1_device *rkisp1)
> * Interrupt handlers
> */
>
> -void rkisp1_mipi_isr(struct rkisp1_device *rkisp1)
> +irqreturn_t rkisp1_mipi_isr(int irq, void *ctx)
> {
> + struct device *dev = ctx;
> + struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
> u32 val, status;
>
> status = rkisp1_read(rkisp1, RKISP1_CIF_MIPI_MIS);
> if (!status)
> - return;
> + return IRQ_NONE;
>
> rkisp1_write(rkisp1, status, RKISP1_CIF_MIPI_ICR);
>
> @@ -1131,6 +1133,8 @@ void rkisp1_mipi_isr(struct rkisp1_device *rkisp1)
> } else {
> rkisp1->debug.mipi_error++;
> }
> +
> + return IRQ_HANDLED;
> }
>
> static void rkisp1_isp_queue_event_sof(struct rkisp1_isp *isp)
> @@ -1143,13 +1147,15 @@ static void rkisp1_isp_queue_event_sof(struct rkisp1_isp *isp)
> v4l2_event_queue(isp->sd.devnode, &event);
> }
>
> -void rkisp1_isp_isr(struct rkisp1_device *rkisp1)
> +irqreturn_t rkisp1_isp_isr(int irq, void *ctx)
> {
> + struct device *dev = ctx;
> + struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
> u32 status, isp_err;
>
> status = rkisp1_read(rkisp1, RKISP1_CIF_ISP_MIS);
> if (!status)
> - return;
> + return IRQ_NONE;
>
> rkisp1_write(rkisp1, status, RKISP1_CIF_ISP_ICR);
>
> @@ -1191,4 +1197,6 @@ void rkisp1_isp_isr(struct rkisp1_device *rkisp1)
> */
> rkisp1_params_isr(rkisp1);
> }
> +
> + return IRQ_HANDLED;
> }
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 2/7] media: rockchip: rkisp1: allow separate interrupts
@ 2021-06-15 5:42 ` Dafna Hirschfeld
0 siblings, 0 replies; 38+ messages in thread
From: Dafna Hirschfeld @ 2021-06-15 5:42 UTC (permalink / raw)
To: Heiko Stuebner, mchehab, hverkuil-cisco
Cc: ezequiel, helen.koike, Laurent.pinchart, linux-rockchip,
linux-media, Heiko Stuebner
Hi,
On 15.06.21 03:37, Heiko Stuebner wrote:
> From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
>
> Depending on the per-soc implementation there can be one interrupt
> for isp, mipi and capture events or separate per-event interrupts.
>
> So simply check for the presence of a named "mi" interrupt
> to differentiate between the two cases.
So in this patch you actually relay on the 'interrupt-names' property added to
the binding right? So I think you should also update the 'rockchip-isp1.yaml' file.
Thanks,
Dafna
>
> Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> ---
> .../platform/rockchip/rkisp1/rkisp1-capture.c | 9 ++-
> .../platform/rockchip/rkisp1/rkisp1-common.h | 7 ++-
> .../platform/rockchip/rkisp1/rkisp1-dev.c | 58 ++++++++++++++-----
> .../platform/rockchip/rkisp1/rkisp1-isp.c | 16 +++--
> 4 files changed, 69 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> index 5f6c9d1623e4..f70c66c2a1d7 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> @@ -685,12 +685,17 @@ static void rkisp1_handle_buffer(struct rkisp1_capture *cap)
> spin_unlock(&cap->buf.lock);
> }
>
> -void rkisp1_capture_isr(struct rkisp1_device *rkisp1)
> +irqreturn_t rkisp1_capture_isr(int irq, void *ctx)
> {
> + struct device *dev = ctx;
> + struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
> unsigned int i;
> u32 status;
>
> status = rkisp1_read(rkisp1, RKISP1_CIF_MI_MIS);
> + if (!status)
> + return IRQ_NONE;
> +
> rkisp1_write(rkisp1, status, RKISP1_CIF_MI_ICR);
>
> for (i = 0; i < ARRAY_SIZE(rkisp1->capture_devs); ++i) {
> @@ -718,6 +723,8 @@ void rkisp1_capture_isr(struct rkisp1_device *rkisp1)
> cap->is_streaming = false;
> wake_up(&cap->done);
> }
> +
> + return IRQ_HANDLED;
> }
>
> /* ----------------------------------------------------------------------------
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> index be8a350c7527..25dd5c93620e 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> @@ -12,6 +12,7 @@
> #define _RKISP1_COMMON_H
>
> #include <linux/clk.h>
> +#include <linux/interrupt.h>
> #include <linux/mutex.h>
> #include <linux/rkisp1-config.h>
> #include <media/media-device.h>
> @@ -459,9 +460,9 @@ void rkisp1_params_configure(struct rkisp1_params *params,
> void rkisp1_params_disable(struct rkisp1_params *params);
>
> /* irq handlers */
> -void rkisp1_isp_isr(struct rkisp1_device *rkisp1);
> -void rkisp1_mipi_isr(struct rkisp1_device *rkisp1);
> -void rkisp1_capture_isr(struct rkisp1_device *rkisp1);
> +irqreturn_t rkisp1_isp_isr(int irq, void *ctx);
> +irqreturn_t rkisp1_mipi_isr(int irq, void *ctx);
> +irqreturn_t rkisp1_capture_isr(int irq, void *ctx);
> void rkisp1_stats_isr(struct rkisp1_stats *stats, u32 isp_ris);
> void rkisp1_params_isr(struct rkisp1_device *rkisp1);
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> index 7afa4c123834..ddc05189c62a 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> @@ -385,18 +385,15 @@ static int rkisp1_entities_register(struct rkisp1_device *rkisp1)
>
> static irqreturn_t rkisp1_isr(int irq, void *ctx)
> {
> - struct device *dev = ctx;
> - struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
> -
> /*
> * Call rkisp1_capture_isr() first to handle the frame that
> * potentially completed using the current frame_sequence number before
> * it is potentially incremented by rkisp1_isp_isr() in the vertical
> * sync.
> */
> - rkisp1_capture_isr(rkisp1);
> - rkisp1_isp_isr(rkisp1);
> - rkisp1_mipi_isr(rkisp1);
> + rkisp1_capture_isr(irq, ctx);
> + rkisp1_isp_isr(irq, ctx);
> + rkisp1_mipi_isr(irq, ctx);
>
> return IRQ_HANDLED;
> }
> @@ -478,15 +475,50 @@ static int rkisp1_probe(struct platform_device *pdev)
> if (IS_ERR(rkisp1->base_addr))
> return PTR_ERR(rkisp1->base_addr);
>
> - irq = platform_get_irq(pdev, 0);
> - if (irq < 0)
> + irq = platform_get_irq_byname_optional(pdev, "mi");
> + if (irq == -EPROBE_DEFER) {
> return irq;
> + } else if (irq < 0) {
> + irq = platform_get_irq(pdev, 0);
> + if (irq < 0)
> + return irq;
> +
> + ret = devm_request_irq(dev, irq, rkisp1_isr, IRQF_SHARED,
> + dev_driver_string(dev), dev);
> + if (ret) {
> + dev_err(dev, "request irq failed: %d\n", ret);
> + return ret;
> + }
> + } else {
> + /* we test-got the MI (capture) interrupt */
> + ret = devm_request_irq(dev, irq, rkisp1_capture_isr, IRQF_SHARED,
> + dev_driver_string(dev), dev);
> + if (ret) {
> + dev_err(dev, "request mi irq failed: %d\n", ret);
> + return ret;
> + }
>
> - ret = devm_request_irq(dev, irq, rkisp1_isr, IRQF_SHARED,
> - dev_driver_string(dev), dev);
> - if (ret) {
> - dev_err(dev, "request irq failed: %d\n", ret);
> - return ret;
> + irq = platform_get_irq_byname_optional(pdev, "mipi");
> + if (irq < 0)
> + return irq;
> +
> + ret = devm_request_irq(dev, irq, rkisp1_mipi_isr, IRQF_SHARED,
> + dev_driver_string(dev), dev);
> + if (ret) {
> + dev_err(dev, "request mipi irq failed: %d\n", ret);
> + return ret;
> + }
> +
> + irq = platform_get_irq_byname_optional(pdev, "isp");
> + if (irq < 0)
> + return irq;
> +
> + ret = devm_request_irq(dev, irq, rkisp1_isp_isr, IRQF_SHARED,
> + dev_driver_string(dev), dev);
> + if (ret) {
> + dev_err(dev, "request isp irq failed: %d\n", ret);
> + return ret;
> + }
> }
>
> for (i = 0; i < match_data->size; i++)
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> index 2e5b57e3aedc..1de98e688008 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> @@ -1090,13 +1090,15 @@ void rkisp1_isp_unregister(struct rkisp1_device *rkisp1)
> * Interrupt handlers
> */
>
> -void rkisp1_mipi_isr(struct rkisp1_device *rkisp1)
> +irqreturn_t rkisp1_mipi_isr(int irq, void *ctx)
> {
> + struct device *dev = ctx;
> + struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
> u32 val, status;
>
> status = rkisp1_read(rkisp1, RKISP1_CIF_MIPI_MIS);
> if (!status)
> - return;
> + return IRQ_NONE;
>
> rkisp1_write(rkisp1, status, RKISP1_CIF_MIPI_ICR);
>
> @@ -1131,6 +1133,8 @@ void rkisp1_mipi_isr(struct rkisp1_device *rkisp1)
> } else {
> rkisp1->debug.mipi_error++;
> }
> +
> + return IRQ_HANDLED;
> }
>
> static void rkisp1_isp_queue_event_sof(struct rkisp1_isp *isp)
> @@ -1143,13 +1147,15 @@ static void rkisp1_isp_queue_event_sof(struct rkisp1_isp *isp)
> v4l2_event_queue(isp->sd.devnode, &event);
> }
>
> -void rkisp1_isp_isr(struct rkisp1_device *rkisp1)
> +irqreturn_t rkisp1_isp_isr(int irq, void *ctx)
> {
> + struct device *dev = ctx;
> + struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
> u32 status, isp_err;
>
> status = rkisp1_read(rkisp1, RKISP1_CIF_ISP_MIS);
> if (!status)
> - return;
> + return IRQ_NONE;
>
> rkisp1_write(rkisp1, status, RKISP1_CIF_ISP_ICR);
>
> @@ -1191,4 +1197,6 @@ void rkisp1_isp_isr(struct rkisp1_device *rkisp1)
> */
> rkisp1_params_isr(rkisp1);
> }
> +
> + return IRQ_HANDLED;
> }
>
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 1/7] media: rockchip: rkisp1: remove unused irq variable
2021-06-15 0:37 ` Heiko Stuebner
@ 2021-06-15 5:44 ` Dafna Hirschfeld
-1 siblings, 0 replies; 38+ messages in thread
From: Dafna Hirschfeld @ 2021-06-15 5:44 UTC (permalink / raw)
To: Heiko Stuebner, mchehab, hverkuil-cisco
Cc: ezequiel, helen.koike, Laurent.pinchart, linux-rockchip,
linux-media, Heiko Stuebner
Hi,
On 15.06.21 03:37, Heiko Stuebner wrote:
> From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
>
> The irq variable in struct rkisp1 is unused as it is only used
> to request the irq during probe, so remove it.
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Reviewed-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
> ---
> drivers/media/platform/rockchip/rkisp1/rkisp1-common.h | 1 -
> drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c | 2 --
> 2 files changed, 3 deletions(-)
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> index 038c303a8aed..be8a350c7527 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> @@ -352,7 +352,6 @@ struct rkisp1_debug {
> */
> struct rkisp1_device {
> void __iomem *base_addr;
> - int irq;
> struct device *dev;
> unsigned int clk_size;
> struct clk_bulk_data clks[RKISP1_MAX_BUS_CLK];
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> index 7474150b94ed..7afa4c123834 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> @@ -489,8 +489,6 @@ static int rkisp1_probe(struct platform_device *pdev)
> return ret;
> }
>
> - rkisp1->irq = irq;
> -
> for (i = 0; i < match_data->size; i++)
> rkisp1->clks[i].id = match_data->clks[i];
> ret = devm_clk_bulk_get(dev, match_data->size, rkisp1->clks);
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 1/7] media: rockchip: rkisp1: remove unused irq variable
@ 2021-06-15 5:44 ` Dafna Hirschfeld
0 siblings, 0 replies; 38+ messages in thread
From: Dafna Hirschfeld @ 2021-06-15 5:44 UTC (permalink / raw)
To: Heiko Stuebner, mchehab, hverkuil-cisco
Cc: ezequiel, helen.koike, Laurent.pinchart, linux-rockchip,
linux-media, Heiko Stuebner
Hi,
On 15.06.21 03:37, Heiko Stuebner wrote:
> From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
>
> The irq variable in struct rkisp1 is unused as it is only used
> to request the irq during probe, so remove it.
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Reviewed-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
> ---
> drivers/media/platform/rockchip/rkisp1/rkisp1-common.h | 1 -
> drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c | 2 --
> 2 files changed, 3 deletions(-)
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> index 038c303a8aed..be8a350c7527 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> @@ -352,7 +352,6 @@ struct rkisp1_debug {
> */
> struct rkisp1_device {
> void __iomem *base_addr;
> - int irq;
> struct device *dev;
> unsigned int clk_size;
> struct clk_bulk_data clks[RKISP1_MAX_BUS_CLK];
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> index 7474150b94ed..7afa4c123834 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> @@ -489,8 +489,6 @@ static int rkisp1_probe(struct platform_device *pdev)
> return ret;
> }
>
> - rkisp1->irq = irq;
> -
> for (i = 0; i < match_data->size; i++)
> rkisp1->clks[i].id = match_data->clks[i];
> ret = devm_clk_bulk_get(dev, match_data->size, rkisp1->clks);
>
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 3/7] media: rockchip: rkisp1: make some isp-param functions variable
2021-06-15 0:37 ` Heiko Stuebner
@ 2021-06-15 5:53 ` Dafna Hirschfeld
-1 siblings, 0 replies; 38+ messages in thread
From: Dafna Hirschfeld @ 2021-06-15 5:53 UTC (permalink / raw)
To: Heiko Stuebner, mchehab, hverkuil-cisco
Cc: ezequiel, helen.koike, Laurent.pinchart, linux-rockchip,
linux-media, Heiko Stuebner
Hi,
On 15.06.21 03:37, Heiko Stuebner wrote:
> From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
>
> The isp block evolved in subsequent socs, so some functions
> will behave differently on newer variants.
>
> Therefore make it possible to override the needed params functions.
>
> Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> ---
> .../platform/rockchip/rkisp1/rkisp1-common.h | 25 ++++++++
> .../platform/rockchip/rkisp1/rkisp1-params.c | 64 ++++++++++++-------
> 2 files changed, 65 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> index 25dd5c93620e..74ddd8256366 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> @@ -254,11 +254,35 @@ struct rkisp1_stats {
> struct v4l2_format vdev_fmt;
> };
>
> +struct rkisp1_params;
> +struct rkisp1_params_ops {
> + void (*lsc_matrix_config)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_lsc_config *pconfig);
> + void (*goc_config)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_goc_config *arg);
> + void (*awb_meas_config)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_meas_config *arg);
> + void (*awb_meas_enable)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_meas_config *arg,
> + bool en);
> + void (*awb_gain_config)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_gain_config *arg);
> + void (*aec_config)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_aec_config *arg);
> + void (*hst_config)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_hst_config *arg);
> + void (*hst_enable)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_hst_config *arg, bool en);
> + void (*afm_config)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_afc_config *arg);
> +};
> +
> /*
> * struct rkisp1_params - ISP input parameters device
> *
> * @vnode: video node
> * @rkisp1: pointer to the rkisp1 device
> + * @ops: pointer to the variant-specific operations
> * @config_lock: locks the buffer list 'params'
> * @params: queue of rkisp1_buffer
> * @vdev_fmt: v4l2_format of the metadata format
> @@ -268,6 +292,7 @@ struct rkisp1_stats {
> struct rkisp1_params {
> struct rkisp1_vdev_node vnode;
> struct rkisp1_device *rkisp1;
> + struct rkisp1_params_ops *ops;
>
> spinlock_t config_lock; /* locks the buffers list 'params' */
> struct list_head params;
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> index b6beddd988d0..a971892ba81d 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> @@ -185,8 +185,8 @@ static void rkisp1_bls_config(struct rkisp1_params *params,
>
> /* ISP LS correction interface function */
> static void
> -rkisp1_lsc_correct_matrix_config(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_lsc_config *pconfig)
> +rkisp1_lsc_matrix_config(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_lsc_config *pconfig)
> {
> unsigned int isp_lsc_status, sram_addr, isp_lsc_table_sel, i, j, data;
>
> @@ -265,7 +265,7 @@ static void rkisp1_lsc_config(struct rkisp1_params *params,
> lsc_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_LSC_CTRL);
> rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_LSC_CTRL,
> RKISP1_CIF_ISP_LSC_CTRL_ENA);
> - rkisp1_lsc_correct_matrix_config(params, arg);
> + params->ops->lsc_matrix_config(params, arg);
>
> for (i = 0; i < RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE / 2; i++) {
> /* program x size tables */
> @@ -955,7 +955,7 @@ rkisp1_isp_isr_other_config(struct rkisp1_params *params,
>
> /* update awb gains */
> if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB_GAIN)
> - rkisp1_awb_gain_config(params, &new_params->others.awb_gain_config);
> + params->ops->awb_gain_config(params, &new_params->others.awb_gain_config);
>
> if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB_GAIN) {
> if (module_ens & RKISP1_CIF_ISP_MODULE_AWB_GAIN)
> @@ -1010,8 +1010,7 @@ rkisp1_isp_isr_other_config(struct rkisp1_params *params,
>
> /* update goc config */
> if (module_cfg_update & RKISP1_CIF_ISP_MODULE_GOC)
> - rkisp1_goc_config(params,
> - &new_params->others.goc_config);
> + params->ops->goc_config(params, &new_params->others.goc_config);
>
> if (module_en_update & RKISP1_CIF_ISP_MODULE_GOC) {
> if (module_ens & RKISP1_CIF_ISP_MODULE_GOC)
> @@ -1081,17 +1080,17 @@ static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
>
> /* update awb config */
> if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB)
> - rkisp1_awb_meas_config(params, &new_params->meas.awb_meas_config);
> + params->ops->awb_meas_config(params, &new_params->meas.awb_meas_config);
>
> if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB)
> - rkisp1_awb_meas_enable(params,
> - &new_params->meas.awb_meas_config,
> - !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
> + params->ops->awb_meas_enable(params,
> + &new_params->meas.awb_meas_config,
> + !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
>
> /* update afc config */
> if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AFC)
> - rkisp1_afm_config(params,
> - &new_params->meas.afc_config);
> + params->ops->afm_config(params,
> + &new_params->meas.afc_config);
>
> if (module_en_update & RKISP1_CIF_ISP_MODULE_AFC) {
> if (module_ens & RKISP1_CIF_ISP_MODULE_AFC)
> @@ -1106,18 +1105,21 @@ static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
>
> /* update hst config */
> if (module_cfg_update & RKISP1_CIF_ISP_MODULE_HST)
> - rkisp1_hst_config(params,
> - &new_params->meas.hst_config);
> + params->ops->hst_config(params,
> + &new_params->meas.hst_config);
>
> if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
> + params->ops->hst_enable(params,
> + &new_params->meas.hst_config,
> + !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
> rkisp1_hst_enable(params,
> &new_params->meas.hst_config,
> !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
shouldn't rkisp1_hst_enable call be removed?
Thanks,
Dafna
>
> /* update aec config */
> if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AEC)
> - rkisp1_aec_config(params,
> - &new_params->meas.aec_config);
> + params->ops->aec_config(params,
> + &new_params->meas.aec_config);
>
> if (module_en_update & RKISP1_CIF_ISP_MODULE_AEC) {
> if (module_ens & RKISP1_CIF_ISP_MODULE_AEC)
> @@ -1218,20 +1220,20 @@ static void rkisp1_params_config_parameter(struct rkisp1_params *params)
> {
> struct rkisp1_cif_isp_hst_config hst = rkisp1_hst_params_default_config;
>
> - rkisp1_awb_meas_config(params, &rkisp1_awb_params_default_config);
> - rkisp1_awb_meas_enable(params, &rkisp1_awb_params_default_config,
> - true);
> + params->ops->awb_meas_config(params, &rkisp1_awb_params_default_config);
> + params->ops->awb_meas_enable(params, &rkisp1_awb_params_default_config,
> + true);
>
> - rkisp1_aec_config(params, &rkisp1_aec_params_default_config);
> + params->ops->aec_config(params, &rkisp1_aec_params_default_config);
> rkisp1_param_set_bits(params, RKISP1_CIF_ISP_EXP_CTRL,
> RKISP1_CIF_ISP_EXP_ENA);
>
> - rkisp1_afm_config(params, &rkisp1_afc_params_default_config);
> + params->ops->afm_config(params, &rkisp1_afc_params_default_config);
> rkisp1_param_set_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
> RKISP1_CIF_ISP_AFM_ENA);
>
> memset(hst.hist_weight, 0x01, sizeof(hst.hist_weight));
> - rkisp1_hst_config(params, &hst);
> + params->ops->hst_config(params, &hst);
> rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP,
> rkisp1_hst_params_default_config.mode);
>
> @@ -1275,7 +1277,7 @@ void rkisp1_params_disable(struct rkisp1_params *params)
> RKISP1_CIF_ISP_DEMOSAIC_BYPASS);
> rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_FILT_MODE,
> RKISP1_CIF_ISP_FLT_ENA);
> - rkisp1_awb_meas_enable(params, NULL, false);
> + params->ops->awb_meas_enable(params, NULL, false);
> rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
> RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
> rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_EXP_CTRL,
> @@ -1283,7 +1285,7 @@ void rkisp1_params_disable(struct rkisp1_params *params)
> rkisp1_ctk_enable(params, false);
> rkisp1_param_clear_bits(params, RKISP1_CIF_C_PROC_CTRL,
> RKISP1_CIF_C_PROC_CTR_ENABLE);
> - rkisp1_hst_enable(params, NULL, false);
> + params->ops->hst_enable(params, NULL, false);
> rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
> RKISP1_CIF_ISP_AFM_ENA);
> rkisp1_ie_enable(params, false);
> @@ -1291,6 +1293,18 @@ void rkisp1_params_disable(struct rkisp1_params *params)
> RKISP1_CIF_ISP_DPF_MODE_EN);
> }
>
> +static struct rkisp1_params_ops rkisp1_params_ops = {
> + .lsc_matrix_config = rkisp1_lsc_matrix_config,
> + .goc_config = rkisp1_goc_config,
> + .awb_meas_config = rkisp1_awb_meas_config,
> + .awb_meas_enable = rkisp1_awb_meas_enable,
> + .awb_gain_config = rkisp1_awb_gain_config,
> + .aec_config = rkisp1_aec_config,
> + .hst_config = rkisp1_hst_config,
> + .hst_enable = rkisp1_hst_enable,
> + .afm_config = rkisp1_afm_config,
> +};
> +
> static int rkisp1_params_enum_fmt_meta_out(struct file *file, void *priv,
> struct v4l2_fmtdesc *f)
> {
> @@ -1457,6 +1471,8 @@ static void rkisp1_init_params(struct rkisp1_params *params)
> V4L2_META_FMT_RK_ISP1_PARAMS;
> params->vdev_fmt.fmt.meta.buffersize =
> sizeof(struct rkisp1_params_cfg);
> +
> + params->ops = &rkisp1_params_ops;
> }
>
> int rkisp1_params_register(struct rkisp1_device *rkisp1)
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 3/7] media: rockchip: rkisp1: make some isp-param functions variable
@ 2021-06-15 5:53 ` Dafna Hirschfeld
0 siblings, 0 replies; 38+ messages in thread
From: Dafna Hirschfeld @ 2021-06-15 5:53 UTC (permalink / raw)
To: Heiko Stuebner, mchehab, hverkuil-cisco
Cc: ezequiel, helen.koike, Laurent.pinchart, linux-rockchip,
linux-media, Heiko Stuebner
Hi,
On 15.06.21 03:37, Heiko Stuebner wrote:
> From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
>
> The isp block evolved in subsequent socs, so some functions
> will behave differently on newer variants.
>
> Therefore make it possible to override the needed params functions.
>
> Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> ---
> .../platform/rockchip/rkisp1/rkisp1-common.h | 25 ++++++++
> .../platform/rockchip/rkisp1/rkisp1-params.c | 64 ++++++++++++-------
> 2 files changed, 65 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> index 25dd5c93620e..74ddd8256366 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> @@ -254,11 +254,35 @@ struct rkisp1_stats {
> struct v4l2_format vdev_fmt;
> };
>
> +struct rkisp1_params;
> +struct rkisp1_params_ops {
> + void (*lsc_matrix_config)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_lsc_config *pconfig);
> + void (*goc_config)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_goc_config *arg);
> + void (*awb_meas_config)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_meas_config *arg);
> + void (*awb_meas_enable)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_meas_config *arg,
> + bool en);
> + void (*awb_gain_config)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_gain_config *arg);
> + void (*aec_config)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_aec_config *arg);
> + void (*hst_config)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_hst_config *arg);
> + void (*hst_enable)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_hst_config *arg, bool en);
> + void (*afm_config)(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_afc_config *arg);
> +};
> +
> /*
> * struct rkisp1_params - ISP input parameters device
> *
> * @vnode: video node
> * @rkisp1: pointer to the rkisp1 device
> + * @ops: pointer to the variant-specific operations
> * @config_lock: locks the buffer list 'params'
> * @params: queue of rkisp1_buffer
> * @vdev_fmt: v4l2_format of the metadata format
> @@ -268,6 +292,7 @@ struct rkisp1_stats {
> struct rkisp1_params {
> struct rkisp1_vdev_node vnode;
> struct rkisp1_device *rkisp1;
> + struct rkisp1_params_ops *ops;
>
> spinlock_t config_lock; /* locks the buffers list 'params' */
> struct list_head params;
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> index b6beddd988d0..a971892ba81d 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> @@ -185,8 +185,8 @@ static void rkisp1_bls_config(struct rkisp1_params *params,
>
> /* ISP LS correction interface function */
> static void
> -rkisp1_lsc_correct_matrix_config(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_lsc_config *pconfig)
> +rkisp1_lsc_matrix_config(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_lsc_config *pconfig)
> {
> unsigned int isp_lsc_status, sram_addr, isp_lsc_table_sel, i, j, data;
>
> @@ -265,7 +265,7 @@ static void rkisp1_lsc_config(struct rkisp1_params *params,
> lsc_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_LSC_CTRL);
> rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_LSC_CTRL,
> RKISP1_CIF_ISP_LSC_CTRL_ENA);
> - rkisp1_lsc_correct_matrix_config(params, arg);
> + params->ops->lsc_matrix_config(params, arg);
>
> for (i = 0; i < RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE / 2; i++) {
> /* program x size tables */
> @@ -955,7 +955,7 @@ rkisp1_isp_isr_other_config(struct rkisp1_params *params,
>
> /* update awb gains */
> if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB_GAIN)
> - rkisp1_awb_gain_config(params, &new_params->others.awb_gain_config);
> + params->ops->awb_gain_config(params, &new_params->others.awb_gain_config);
>
> if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB_GAIN) {
> if (module_ens & RKISP1_CIF_ISP_MODULE_AWB_GAIN)
> @@ -1010,8 +1010,7 @@ rkisp1_isp_isr_other_config(struct rkisp1_params *params,
>
> /* update goc config */
> if (module_cfg_update & RKISP1_CIF_ISP_MODULE_GOC)
> - rkisp1_goc_config(params,
> - &new_params->others.goc_config);
> + params->ops->goc_config(params, &new_params->others.goc_config);
>
> if (module_en_update & RKISP1_CIF_ISP_MODULE_GOC) {
> if (module_ens & RKISP1_CIF_ISP_MODULE_GOC)
> @@ -1081,17 +1080,17 @@ static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
>
> /* update awb config */
> if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB)
> - rkisp1_awb_meas_config(params, &new_params->meas.awb_meas_config);
> + params->ops->awb_meas_config(params, &new_params->meas.awb_meas_config);
>
> if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB)
> - rkisp1_awb_meas_enable(params,
> - &new_params->meas.awb_meas_config,
> - !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
> + params->ops->awb_meas_enable(params,
> + &new_params->meas.awb_meas_config,
> + !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
>
> /* update afc config */
> if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AFC)
> - rkisp1_afm_config(params,
> - &new_params->meas.afc_config);
> + params->ops->afm_config(params,
> + &new_params->meas.afc_config);
>
> if (module_en_update & RKISP1_CIF_ISP_MODULE_AFC) {
> if (module_ens & RKISP1_CIF_ISP_MODULE_AFC)
> @@ -1106,18 +1105,21 @@ static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
>
> /* update hst config */
> if (module_cfg_update & RKISP1_CIF_ISP_MODULE_HST)
> - rkisp1_hst_config(params,
> - &new_params->meas.hst_config);
> + params->ops->hst_config(params,
> + &new_params->meas.hst_config);
>
> if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
> + params->ops->hst_enable(params,
> + &new_params->meas.hst_config,
> + !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
> rkisp1_hst_enable(params,
> &new_params->meas.hst_config,
> !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
shouldn't rkisp1_hst_enable call be removed?
Thanks,
Dafna
>
> /* update aec config */
> if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AEC)
> - rkisp1_aec_config(params,
> - &new_params->meas.aec_config);
> + params->ops->aec_config(params,
> + &new_params->meas.aec_config);
>
> if (module_en_update & RKISP1_CIF_ISP_MODULE_AEC) {
> if (module_ens & RKISP1_CIF_ISP_MODULE_AEC)
> @@ -1218,20 +1220,20 @@ static void rkisp1_params_config_parameter(struct rkisp1_params *params)
> {
> struct rkisp1_cif_isp_hst_config hst = rkisp1_hst_params_default_config;
>
> - rkisp1_awb_meas_config(params, &rkisp1_awb_params_default_config);
> - rkisp1_awb_meas_enable(params, &rkisp1_awb_params_default_config,
> - true);
> + params->ops->awb_meas_config(params, &rkisp1_awb_params_default_config);
> + params->ops->awb_meas_enable(params, &rkisp1_awb_params_default_config,
> + true);
>
> - rkisp1_aec_config(params, &rkisp1_aec_params_default_config);
> + params->ops->aec_config(params, &rkisp1_aec_params_default_config);
> rkisp1_param_set_bits(params, RKISP1_CIF_ISP_EXP_CTRL,
> RKISP1_CIF_ISP_EXP_ENA);
>
> - rkisp1_afm_config(params, &rkisp1_afc_params_default_config);
> + params->ops->afm_config(params, &rkisp1_afc_params_default_config);
> rkisp1_param_set_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
> RKISP1_CIF_ISP_AFM_ENA);
>
> memset(hst.hist_weight, 0x01, sizeof(hst.hist_weight));
> - rkisp1_hst_config(params, &hst);
> + params->ops->hst_config(params, &hst);
> rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP,
> rkisp1_hst_params_default_config.mode);
>
> @@ -1275,7 +1277,7 @@ void rkisp1_params_disable(struct rkisp1_params *params)
> RKISP1_CIF_ISP_DEMOSAIC_BYPASS);
> rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_FILT_MODE,
> RKISP1_CIF_ISP_FLT_ENA);
> - rkisp1_awb_meas_enable(params, NULL, false);
> + params->ops->awb_meas_enable(params, NULL, false);
> rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
> RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
> rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_EXP_CTRL,
> @@ -1283,7 +1285,7 @@ void rkisp1_params_disable(struct rkisp1_params *params)
> rkisp1_ctk_enable(params, false);
> rkisp1_param_clear_bits(params, RKISP1_CIF_C_PROC_CTRL,
> RKISP1_CIF_C_PROC_CTR_ENABLE);
> - rkisp1_hst_enable(params, NULL, false);
> + params->ops->hst_enable(params, NULL, false);
> rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
> RKISP1_CIF_ISP_AFM_ENA);
> rkisp1_ie_enable(params, false);
> @@ -1291,6 +1293,18 @@ void rkisp1_params_disable(struct rkisp1_params *params)
> RKISP1_CIF_ISP_DPF_MODE_EN);
> }
>
> +static struct rkisp1_params_ops rkisp1_params_ops = {
> + .lsc_matrix_config = rkisp1_lsc_matrix_config,
> + .goc_config = rkisp1_goc_config,
> + .awb_meas_config = rkisp1_awb_meas_config,
> + .awb_meas_enable = rkisp1_awb_meas_enable,
> + .awb_gain_config = rkisp1_awb_gain_config,
> + .aec_config = rkisp1_aec_config,
> + .hst_config = rkisp1_hst_config,
> + .hst_enable = rkisp1_hst_enable,
> + .afm_config = rkisp1_afm_config,
> +};
> +
> static int rkisp1_params_enum_fmt_meta_out(struct file *file, void *priv,
> struct v4l2_fmtdesc *f)
> {
> @@ -1457,6 +1471,8 @@ static void rkisp1_init_params(struct rkisp1_params *params)
> V4L2_META_FMT_RK_ISP1_PARAMS;
> params->vdev_fmt.fmt.meta.buffersize =
> sizeof(struct rkisp1_params_cfg);
> +
> + params->ops = &rkisp1_params_ops;
> }
>
> int rkisp1_params_register(struct rkisp1_device *rkisp1)
>
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 5/7] media: rockchip: rkisp1: add prefixes for v10 specific parts
2021-06-15 0:37 ` Heiko Stuebner
@ 2021-06-15 6:06 ` Dafna Hirschfeld
-1 siblings, 0 replies; 38+ messages in thread
From: Dafna Hirschfeld @ 2021-06-15 6:06 UTC (permalink / raw)
To: Heiko Stuebner, mchehab, hverkuil-cisco
Cc: ezequiel, helen.koike, Laurent.pinchart, linux-rockchip,
linux-media, Heiko Stuebner
Hi,
On 15.06.21 03:37, Heiko Stuebner wrote:
> From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
>
> The rkisp1 evolved over soc generations and the rk3326/px30 introduced
> the so called v12 - probably meaning v1.2.
>
> In a first step adapt the affected v10 parts to give them a
> matching suffix to enable us to add v12 variants later on.
>
> Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> ---
> .../platform/rockchip/rkisp1/rkisp1-params.c | 180 +++++------
> .../platform/rockchip/rkisp1/rkisp1-regs.h | 295 ++++++++++--------
> .../platform/rockchip/rkisp1/rkisp1-stats.c | 32 +-
> 3 files changed, 269 insertions(+), 238 deletions(-)
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> index a971892ba81d..427c7cc400b2 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> @@ -185,8 +185,8 @@ static void rkisp1_bls_config(struct rkisp1_params *params,
>
> /* ISP LS correction interface function */
> static void
> -rkisp1_lsc_matrix_config(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_lsc_config *pconfig)
> +rkisp1_lsc_matrix_config_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_lsc_config *pconfig)
> {
> unsigned int isp_lsc_status, sram_addr, isp_lsc_table_sel, i, j, data;
>
> @@ -212,39 +212,39 @@ rkisp1_lsc_matrix_config(struct rkisp1_params *params,
> * DWORDs (2nd value of last DWORD unused)
> */
> for (j = 0; j < RKISP1_CIF_ISP_LSC_SAMPLES_MAX - 1; j += 2) {
> - data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->r_data_tbl[i][j],
> - pconfig->r_data_tbl[i][j + 1]);
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->r_data_tbl[i][j],
> + pconfig->r_data_tbl[i][j + 1]);
> rkisp1_write(params->rkisp1, data,
> RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
>
> - data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->gr_data_tbl[i][j],
> - pconfig->gr_data_tbl[i][j + 1]);
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->gr_data_tbl[i][j],
> + pconfig->gr_data_tbl[i][j + 1]);
> rkisp1_write(params->rkisp1, data,
> RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
>
> - data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->gb_data_tbl[i][j],
> - pconfig->gb_data_tbl[i][j + 1]);
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->gb_data_tbl[i][j],
> + pconfig->gb_data_tbl[i][j + 1]);
> rkisp1_write(params->rkisp1, data,
> RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
>
> - data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->b_data_tbl[i][j],
> - pconfig->b_data_tbl[i][j + 1]);
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->b_data_tbl[i][j],
> + pconfig->b_data_tbl[i][j + 1]);
> rkisp1_write(params->rkisp1, data,
> RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
> }
> - data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->r_data_tbl[i][j], 0);
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->r_data_tbl[i][j], 0);
> rkisp1_write(params->rkisp1, data,
> RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
>
> - data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->gr_data_tbl[i][j], 0);
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->gr_data_tbl[i][j], 0);
> rkisp1_write(params->rkisp1, data,
> RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
>
> - data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->gb_data_tbl[i][j], 0);
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->gb_data_tbl[i][j], 0);
> rkisp1_write(params->rkisp1, data,
> RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
>
> - data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->b_data_tbl[i][j], 0);
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->b_data_tbl[i][j], 0);
> rkisp1_write(params->rkisp1, data,
> RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
> }
> @@ -382,18 +382,18 @@ static void rkisp1_sdg_config(struct rkisp1_params *params,
> }
>
> /* ISP GAMMA correction interface function */
> -static void rkisp1_goc_config(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_goc_config *arg)
> +static void rkisp1_goc_config_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_goc_config *arg)
> {
> unsigned int i;
>
> rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
> RKISP1_CIF_ISP_CTRL_ISP_GAMMA_OUT_ENA);
> - rkisp1_write(params->rkisp1, arg->mode, RKISP1_CIF_ISP_GAMMA_OUT_MODE);
> + rkisp1_write(params->rkisp1, arg->mode, RKISP1_CIF_ISP_GAMMA_OUT_MODE_V10);
>
> for (i = 0; i < RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10; i++)
> rkisp1_write(params->rkisp1, arg->gamma_y[i],
> - RKISP1_CIF_ISP_GAMMA_OUT_Y_0 + i * 4);
> + RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V10 + i * 4);
> }
>
> /* ISP Cross Talk */
> @@ -433,8 +433,8 @@ static void rkisp1_ctk_enable(struct rkisp1_params *params, bool en)
> }
>
> /* ISP White Balance Mode */
> -static void rkisp1_awb_meas_config(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_awb_meas_config *arg)
> +static void rkisp1_awb_meas_config_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_meas_config *arg)
> {
> u32 reg_val = 0;
> /* based on the mode,configure the awb module */
> @@ -442,43 +442,43 @@ static void rkisp1_awb_meas_config(struct rkisp1_params *params,
> /* Reference Cb and Cr */
> rkisp1_write(params->rkisp1,
> RKISP1_CIF_ISP_AWB_REF_CR_SET(arg->awb_ref_cr) |
> - arg->awb_ref_cb, RKISP1_CIF_ISP_AWB_REF);
> + arg->awb_ref_cb, RKISP1_CIF_ISP_AWB_REF_V10);
> /* Yc Threshold */
> rkisp1_write(params->rkisp1,
> RKISP1_CIF_ISP_AWB_MAX_Y_SET(arg->max_y) |
> RKISP1_CIF_ISP_AWB_MIN_Y_SET(arg->min_y) |
> RKISP1_CIF_ISP_AWB_MAX_CS_SET(arg->max_csum) |
> - arg->min_c, RKISP1_CIF_ISP_AWB_THRESH);
> + arg->min_c, RKISP1_CIF_ISP_AWB_THRESH_V10);
> }
>
> - reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP);
> + reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V10);
> if (arg->enable_ymax_cmp)
> reg_val |= RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
> else
> reg_val &= ~RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
> - rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP);
> + rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V10);
>
> /* window offset */
> rkisp1_write(params->rkisp1,
> - arg->awb_wnd.v_offs, RKISP1_CIF_ISP_AWB_WND_V_OFFS);
> + arg->awb_wnd.v_offs, RKISP1_CIF_ISP_AWB_WND_V_OFFS_V10);
> rkisp1_write(params->rkisp1,
> - arg->awb_wnd.h_offs, RKISP1_CIF_ISP_AWB_WND_H_OFFS);
> + arg->awb_wnd.h_offs, RKISP1_CIF_ISP_AWB_WND_H_OFFS_V10);
> /* AWB window size */
> rkisp1_write(params->rkisp1,
> - arg->awb_wnd.v_size, RKISP1_CIF_ISP_AWB_WND_V_SIZE);
> + arg->awb_wnd.v_size, RKISP1_CIF_ISP_AWB_WND_V_SIZE_V10);
> rkisp1_write(params->rkisp1,
> - arg->awb_wnd.h_size, RKISP1_CIF_ISP_AWB_WND_H_SIZE);
> + arg->awb_wnd.h_size, RKISP1_CIF_ISP_AWB_WND_H_SIZE_V10);
> /* Number of frames */
> rkisp1_write(params->rkisp1,
> - arg->frames, RKISP1_CIF_ISP_AWB_FRAMES);
> + arg->frames, RKISP1_CIF_ISP_AWB_FRAMES_V10);
> }
>
> static void
> -rkisp1_awb_meas_enable(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_awb_meas_config *arg,
> - bool en)
> +rkisp1_awb_meas_enable_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_meas_config *arg,
> + bool en)
> {
> - u32 reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP);
> + u32 reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V10);
>
> /* switch off */
> reg_val &= RKISP1_CIF_ISP_AWB_MODE_MASK_NONE;
> @@ -489,34 +489,34 @@ rkisp1_awb_meas_enable(struct rkisp1_params *params,
> else
> reg_val |= RKISP1_CIF_ISP_AWB_MODE_YCBCR_EN;
>
> - rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP);
> + rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V10);
>
> /* Measurements require AWB block be active. */
> rkisp1_param_set_bits(params, RKISP1_CIF_ISP_CTRL,
> RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
> } else {
> rkisp1_write(params->rkisp1,
> - reg_val, RKISP1_CIF_ISP_AWB_PROP);
> + reg_val, RKISP1_CIF_ISP_AWB_PROP_V10);
> rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
> RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
> }
> }
>
> static void
> -rkisp1_awb_gain_config(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_awb_gain_config *arg)
> +rkisp1_awb_gain_config_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_gain_config *arg)
> {
> rkisp1_write(params->rkisp1,
> RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_green_r) |
> - arg->gain_green_b, RKISP1_CIF_ISP_AWB_GAIN_G);
> + arg->gain_green_b, RKISP1_CIF_ISP_AWB_GAIN_G_V10);
>
> rkisp1_write(params->rkisp1,
> RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_red) |
> - arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB);
> + arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB_V10);
> }
>
> -static void rkisp1_aec_config(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_aec_config *arg)
> +static void rkisp1_aec_config_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_aec_config *arg)
> {
> unsigned int block_hsize, block_vsize;
> u32 exp_ctrl;
> @@ -531,21 +531,21 @@ static void rkisp1_aec_config(struct rkisp1_params *params,
> rkisp1_write(params->rkisp1, exp_ctrl, RKISP1_CIF_ISP_EXP_CTRL);
>
> rkisp1_write(params->rkisp1,
> - arg->meas_window.h_offs, RKISP1_CIF_ISP_EXP_H_OFFSET);
> + arg->meas_window.h_offs, RKISP1_CIF_ISP_EXP_H_OFFSET_V10);
> rkisp1_write(params->rkisp1,
> - arg->meas_window.v_offs, RKISP1_CIF_ISP_EXP_V_OFFSET);
> + arg->meas_window.v_offs, RKISP1_CIF_ISP_EXP_V_OFFSET_V10);
>
> block_hsize = arg->meas_window.h_size /
> - RKISP1_CIF_ISP_EXP_COLUMN_NUM - 1;
> + RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 - 1;
> block_vsize = arg->meas_window.v_size /
> - RKISP1_CIF_ISP_EXP_ROW_NUM - 1;
> + RKISP1_CIF_ISP_EXP_ROW_NUM_V10 - 1;
>
> rkisp1_write(params->rkisp1,
> - RKISP1_CIF_ISP_EXP_H_SIZE_SET(block_hsize),
> - RKISP1_CIF_ISP_EXP_H_SIZE);
> + RKISP1_CIF_ISP_EXP_H_SIZE_SET_V10(block_hsize),
> + RKISP1_CIF_ISP_EXP_H_SIZE_V10);
> rkisp1_write(params->rkisp1,
> - RKISP1_CIF_ISP_EXP_V_SIZE_SET(block_vsize),
> - RKISP1_CIF_ISP_EXP_V_SIZE);
> + RKISP1_CIF_ISP_EXP_V_SIZE_SET_V10(block_vsize),
> + RKISP1_CIF_ISP_EXP_V_SIZE_V10);
> }
>
> static void rkisp1_cproc_config(struct rkisp1_params *params,
> @@ -578,73 +578,73 @@ static void rkisp1_cproc_config(struct rkisp1_params *params,
> }
> }
>
> -static void rkisp1_hst_config(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_hst_config *arg)
> +static void rkisp1_hst_config_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_hst_config *arg)
> {
> unsigned int block_hsize, block_vsize;
> static const u32 hist_weight_regs[] = {
> - RKISP1_CIF_ISP_HIST_WEIGHT_00TO30,
> - RKISP1_CIF_ISP_HIST_WEIGHT_40TO21,
> - RKISP1_CIF_ISP_HIST_WEIGHT_31TO12,
> - RKISP1_CIF_ISP_HIST_WEIGHT_22TO03,
> - RKISP1_CIF_ISP_HIST_WEIGHT_13TO43,
> - RKISP1_CIF_ISP_HIST_WEIGHT_04TO34,
> + RKISP1_CIF_ISP_HIST_WEIGHT_00TO30_V10,
> + RKISP1_CIF_ISP_HIST_WEIGHT_40TO21_V10,
> + RKISP1_CIF_ISP_HIST_WEIGHT_31TO12_V10,
> + RKISP1_CIF_ISP_HIST_WEIGHT_22TO03_V10,
> + RKISP1_CIF_ISP_HIST_WEIGHT_13TO43_V10,
> + RKISP1_CIF_ISP_HIST_WEIGHT_04TO34_V10,
> };
> const u8 *weight;
> unsigned int i;
> u32 hist_prop;
>
> /* avoid to override the old enable value */
> - hist_prop = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_HIST_PROP);
> - hist_prop &= RKISP1_CIF_ISP_HIST_PROP_MODE_MASK;
> - hist_prop |= RKISP1_CIF_ISP_HIST_PREDIV_SET(arg->histogram_predivider);
> - rkisp1_write(params->rkisp1, hist_prop, RKISP1_CIF_ISP_HIST_PROP);
> + hist_prop = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_HIST_PROP_V10);
> + hist_prop &= RKISP1_CIF_ISP_HIST_PROP_MODE_MASK_V10;
> + hist_prop |= RKISP1_CIF_ISP_HIST_PREDIV_SET_V10(arg->histogram_predivider);
> + rkisp1_write(params->rkisp1, hist_prop, RKISP1_CIF_ISP_HIST_PROP_V10);
> rkisp1_write(params->rkisp1,
> arg->meas_window.h_offs,
> - RKISP1_CIF_ISP_HIST_H_OFFS);
> + RKISP1_CIF_ISP_HIST_H_OFFS_V10);
> rkisp1_write(params->rkisp1,
> arg->meas_window.v_offs,
> - RKISP1_CIF_ISP_HIST_V_OFFS);
> + RKISP1_CIF_ISP_HIST_V_OFFS_V10);
>
> block_hsize = arg->meas_window.h_size /
> - RKISP1_CIF_ISP_HIST_COLUMN_NUM - 1;
> - block_vsize = arg->meas_window.v_size / RKISP1_CIF_ISP_HIST_ROW_NUM - 1;
> + RKISP1_CIF_ISP_HIST_COLUMN_NUM_V10 - 1;
> + block_vsize = arg->meas_window.v_size / RKISP1_CIF_ISP_HIST_ROW_NUM_V10 - 1;
>
> - rkisp1_write(params->rkisp1, block_hsize, RKISP1_CIF_ISP_HIST_H_SIZE);
> - rkisp1_write(params->rkisp1, block_vsize, RKISP1_CIF_ISP_HIST_V_SIZE);
> + rkisp1_write(params->rkisp1, block_hsize, RKISP1_CIF_ISP_HIST_H_SIZE_V10);
> + rkisp1_write(params->rkisp1, block_vsize, RKISP1_CIF_ISP_HIST_V_SIZE_V10);
>
> weight = arg->hist_weight;
> for (i = 0; i < ARRAY_SIZE(hist_weight_regs); ++i, weight += 4)
> rkisp1_write(params->rkisp1,
> - RKISP1_CIF_ISP_HIST_WEIGHT_SET(weight[0],
> + RKISP1_CIF_ISP_HIST_WEIGHT_SET_V10(weight[0],
> weight[1],
> weight[2],
> weight[3]),
> hist_weight_regs[i]);
>
> - rkisp1_write(params->rkisp1, weight[0] & 0x1F, RKISP1_CIF_ISP_HIST_WEIGHT_44);
> + rkisp1_write(params->rkisp1, weight[0] & 0x1F, RKISP1_CIF_ISP_HIST_WEIGHT_44_V10);
> }
>
> static void
> -rkisp1_hst_enable(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_hst_config *arg, bool en)
> +rkisp1_hst_enable_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_hst_config *arg, bool en)
> {
> if (en) {
> u32 hist_prop = rkisp1_read(params->rkisp1,
> - RKISP1_CIF_ISP_HIST_PROP);
> + RKISP1_CIF_ISP_HIST_PROP_V10);
>
> - hist_prop &= ~RKISP1_CIF_ISP_HIST_PROP_MODE_MASK;
> + hist_prop &= ~RKISP1_CIF_ISP_HIST_PROP_MODE_MASK_V10;
> hist_prop |= arg->mode;
> - rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP,
> + rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP_V10,
> hist_prop);
> } else {
> - rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_HIST_PROP,
> - RKISP1_CIF_ISP_HIST_PROP_MODE_MASK);
> + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_HIST_PROP_V10,
> + RKISP1_CIF_ISP_HIST_PROP_MODE_MASK_V10);
> }
> }
>
> -static void rkisp1_afm_config(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_afc_config *arg)
> +static void rkisp1_afm_config_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_afc_config *arg)
> {
> size_t num_of_win = min_t(size_t, ARRAY_SIZE(arg->afm_win),
> arg->num_afm_win);
> @@ -1234,7 +1234,7 @@ static void rkisp1_params_config_parameter(struct rkisp1_params *params)
>
> memset(hst.hist_weight, 0x01, sizeof(hst.hist_weight));
> params->ops->hst_config(params, &hst);
> - rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP,
> + rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP_V10,
> rkisp1_hst_params_default_config.mode);
>
> /* set the range */
> @@ -1293,16 +1293,16 @@ void rkisp1_params_disable(struct rkisp1_params *params)
> RKISP1_CIF_ISP_DPF_MODE_EN);
> }
>
> -static struct rkisp1_params_ops rkisp1_params_ops = {
> - .lsc_matrix_config = rkisp1_lsc_matrix_config,
> - .goc_config = rkisp1_goc_config,
> - .awb_meas_config = rkisp1_awb_meas_config,
> - .awb_meas_enable = rkisp1_awb_meas_enable,
> - .awb_gain_config = rkisp1_awb_gain_config,
> - .aec_config = rkisp1_aec_config,
> - .hst_config = rkisp1_hst_config,
> - .hst_enable = rkisp1_hst_enable,
> - .afm_config = rkisp1_afm_config,
> +static struct rkisp1_params_ops rkisp1_v10_params_ops = {
> + .lsc_matrix_config = rkisp1_lsc_matrix_config_v10,
> + .goc_config = rkisp1_goc_config_v10,
> + .awb_meas_config = rkisp1_awb_meas_config_v10,
> + .awb_meas_enable = rkisp1_awb_meas_enable_v10,
> + .awb_gain_config = rkisp1_awb_gain_config_v10,
> + .aec_config = rkisp1_aec_config_v10,
> + .hst_config = rkisp1_hst_config_v10,
> + .hst_enable = rkisp1_hst_enable_v10,
> + .afm_config = rkisp1_afm_config_v10,
> };
>
> static int rkisp1_params_enum_fmt_meta_out(struct file *file, void *priv,
> @@ -1472,7 +1472,7 @@ static void rkisp1_init_params(struct rkisp1_params *params)
> params->vdev_fmt.fmt.meta.buffersize =
> sizeof(struct rkisp1_params_cfg);
>
> - params->ops = &rkisp1_params_ops;
> + params->ops = &rkisp1_v10_params_ops;
> }
>
> int rkisp1_params_register(struct rkisp1_device *rkisp1)
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> index fa33080f51db..c71ccd148bde 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> @@ -212,6 +212,35 @@
>
> /* CCL */
> #define RKISP1_CIF_CCL_CIF_CLK_DIS BIT(2)
> +/* VI_ISP_CLK_CTRL */
> +#define RKISP1_CIF_CLK_CTRL_ISP_RAW BIT(0)
> +#define RKISP1_CIF_CLK_CTRL_ISP_RGB BIT(1)
> +#define RKISP1_CIF_CLK_CTRL_ISP_YUV BIT(2)
> +#define RKISP1_CIF_CLK_CTRL_ISP_3A BIT(3)
> +#define RKISP1_CIF_CLK_CTRL_MIPI_RAW BIT(4)
> +#define RKISP1_CIF_CLK_CTRL_ISP_IE BIT(5)
> +#define RKISP1_CIF_CLK_CTRL_RSZ_RAM BIT(6)
> +#define RKISP1_CIF_CLK_CTRL_JPEG_RAM BIT(7)
> +#define RKISP1_CIF_CLK_CTRL_ACLK_ISP BIT(8)
> +#define RKISP1_CIF_CLK_CTRL_MI_IDC BIT(9)
> +#define RKISP1_CIF_CLK_CTRL_MI_MP BIT(10)
> +#define RKISP1_CIF_CLK_CTRL_MI_JPEG BIT(11)
> +#define RKISP1_CIF_CLK_CTRL_MI_DP BIT(12)
> +#define RKISP1_CIF_CLK_CTRL_MI_Y12 BIT(13)
> +#define RKISP1_CIF_CLK_CTRL_MI_SP BIT(14)
> +#define RKISP1_CIF_CLK_CTRL_MI_RAW0 BIT(15)
> +#define RKISP1_CIF_CLK_CTRL_MI_RAW1 BIT(16)
> +#define RKISP1_CIF_CLK_CTRL_MI_READ BIT(17)
> +#define RKISP1_CIF_CLK_CTRL_MI_RAWRD BIT(18)
> +#define RKISP1_CIF_CLK_CTRL_CP BIT(19)
> +#define RKISP1_CIF_CLK_CTRL_IE BIT(20)
> +#define RKISP1_CIF_CLK_CTRL_SI BIT(21)
> +#define RKISP1_CIF_CLK_CTRL_RSZM BIT(22)
> +#define RKISP1_CIF_CLK_CTRL_DPMUX BIT(23)
> +#define RKISP1_CIF_CLK_CTRL_JPEG BIT(24)
> +#define RKISP1_CIF_CLK_CTRL_RSZS BIT(25)
> +#define RKISP1_CIF_CLK_CTRL_MIPI BIT(26)
> +#define RKISP1_CIF_CLK_CTRL_MARVINMI BIT(27)
What are those new registers? I guess they don't belong to this patch.
Thanks,
Dafna
> /* ICCL */
> #define RKISP1_CIF_ICCL_ISP_CLK BIT(0)
> #define RKISP1_CIF_ICCL_CP_CLK BIT(1)
> @@ -346,26 +375,26 @@
> #define RKISP1_CIF_SUPER_IMP_CTRL_TRANSP_DIS BIT(2)
>
> /* ISP HISTOGRAM CALCULATION : ISP_HIST_PROP */
> -#define RKISP1_CIF_ISP_HIST_PROP_MODE_DIS (0 << 0)
> -#define RKISP1_CIF_ISP_HIST_PROP_MODE_RGB BIT(0)
> -#define RKISP1_CIF_ISP_HIST_PROP_MODE_RED (2 << 0)
> -#define RKISP1_CIF_ISP_HIST_PROP_MODE_GREEN (3 << 0)
> -#define RKISP1_CIF_ISP_HIST_PROP_MODE_BLUE (4 << 0)
> -#define RKISP1_CIF_ISP_HIST_PROP_MODE_LUM (5 << 0)
> -#define RKISP1_CIF_ISP_HIST_PROP_MODE_MASK 0x7
> -#define RKISP1_CIF_ISP_HIST_PREDIV_SET(x) (((x) & 0x7F) << 3)
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_SET(v0, v1, v2, v3) \
> +#define RKISP1_CIF_ISP_HIST_PROP_MODE_DIS_V10 (0 << 0)
> +#define RKISP1_CIF_ISP_HIST_PROP_MODE_RGB_V10 BIT(0)
> +#define RKISP1_CIF_ISP_HIST_PROP_MODE_RED_V10 (2 << 0)
> +#define RKISP1_CIF_ISP_HIST_PROP_MODE_GREEN_V10 (3 << 0)
> +#define RKISP1_CIF_ISP_HIST_PROP_MODE_BLUE_V10 (4 << 0)
> +#define RKISP1_CIF_ISP_HIST_PROP_MODE_LUM_V10 (5 << 0)
> +#define RKISP1_CIF_ISP_HIST_PROP_MODE_MASK_V10 0x7
> +#define RKISP1_CIF_ISP_HIST_PREDIV_SET_V10(x) (((x) & 0x7F) << 3)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_SET_V10(v0, v1, v2, v3) \
> (((v0) & 0x1F) | (((v1) & 0x1F) << 8) |\
> (((v2) & 0x1F) << 16) | \
> (((v3) & 0x1F) << 24))
>
> -#define RKISP1_CIF_ISP_HIST_WINDOW_OFFSET_RESERVED 0xFFFFF000
> -#define RKISP1_CIF_ISP_HIST_WINDOW_SIZE_RESERVED 0xFFFFF800
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_RESERVED 0xE0E0E0E0
> -#define RKISP1_CIF_ISP_MAX_HIST_PREDIVIDER 0x0000007F
> -#define RKISP1_CIF_ISP_HIST_ROW_NUM 5
> -#define RKISP1_CIF_ISP_HIST_COLUMN_NUM 5
> -#define RKISP1_CIF_ISP_HIST_GET_BIN(x) ((x) & 0x000FFFFF)
> +#define RKISP1_CIF_ISP_HIST_WINDOW_OFFSET_RESERVED_V10 0xFFFFF000
> +#define RKISP1_CIF_ISP_HIST_WINDOW_SIZE_RESERVED_V10 0xFFFFF800
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_RESERVED_V10 0xE0E0E0E0
> +#define RKISP1_CIF_ISP_MAX_HIST_PREDIVIDER_V10 0x0000007F
> +#define RKISP1_CIF_ISP_HIST_ROW_NUM_V10 5
> +#define RKISP1_CIF_ISP_HIST_COLUMN_NUM_V10 5
> +#define RKISP1_CIF_ISP_HIST_GET_BIN_V10(x) ((x) & 0x000FFFFF)
>
> /* AUTO FOCUS MEASUREMENT: ISP_AFM_CTRL */
> #define RKISP1_ISP_AFM_CTRL_ENABLE BIT(0)
> @@ -442,41 +471,41 @@
> #define RKISP1_CIF_ISP_EXP_CTRL_MEASMODE_1 BIT(31)
>
> /* ISP_EXP_H_SIZE */
> -#define RKISP1_CIF_ISP_EXP_H_SIZE_SET(x) ((x) & 0x7FF)
> -#define RKISP1_CIF_ISP_EXP_HEIGHT_MASK 0x000007FF
> +#define RKISP1_CIF_ISP_EXP_H_SIZE_SET_V10(x) ((x) & 0x7FF)
> +#define RKISP1_CIF_ISP_EXP_HEIGHT_MASK_V10 0x000007FF
> /* ISP_EXP_V_SIZE : vertical size must be a multiple of 2). */
> -#define RKISP1_CIF_ISP_EXP_V_SIZE_SET(x) ((x) & 0x7FE)
> +#define RKISP1_CIF_ISP_EXP_V_SIZE_SET_V10(x) ((x) & 0x7FE)
>
> /* ISP_EXP_H_OFFSET */
> -#define RKISP1_CIF_ISP_EXP_H_OFFSET_SET(x) ((x) & 0x1FFF)
> -#define RKISP1_CIF_ISP_EXP_MAX_HOFFS 2424
> +#define RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V10(x) ((x) & 0x1FFF)
> +#define RKISP1_CIF_ISP_EXP_MAX_HOFFS_V10 2424
> /* ISP_EXP_V_OFFSET */
> -#define RKISP1_CIF_ISP_EXP_V_OFFSET_SET(x) ((x) & 0x1FFF)
> -#define RKISP1_CIF_ISP_EXP_MAX_VOFFS 1806
> -
> -#define RKISP1_CIF_ISP_EXP_ROW_NUM 5
> -#define RKISP1_CIF_ISP_EXP_COLUMN_NUM 5
> -#define RKISP1_CIF_ISP_EXP_NUM_LUMA_REGS \
> - (RKISP1_CIF_ISP_EXP_ROW_NUM * RKISP1_CIF_ISP_EXP_COLUMN_NUM)
> -#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE 516
> -#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE 35
> -#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE 390
> -#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE 28
> -#define RKISP1_CIF_ISP_EXP_MAX_HSIZE \
> - (RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE * RKISP1_CIF_ISP_EXP_COLUMN_NUM + 1)
> -#define RKISP1_CIF_ISP_EXP_MIN_HSIZE \
> - (RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE * RKISP1_CIF_ISP_EXP_COLUMN_NUM + 1)
> -#define RKISP1_CIF_ISP_EXP_MAX_VSIZE \
> - (RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE * RKISP1_CIF_ISP_EXP_ROW_NUM + 1)
> -#define RKISP1_CIF_ISP_EXP_MIN_VSIZE \
> - (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE * RKISP1_CIF_ISP_EXP_ROW_NUM + 1)
> +#define RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V10(x) ((x) & 0x1FFF)
> +#define RKISP1_CIF_ISP_EXP_MAX_VOFFS_V10 1806
> +
> +#define RKISP1_CIF_ISP_EXP_ROW_NUM_V10 5
> +#define RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 5
> +#define RKISP1_CIF_ISP_EXP_NUM_LUMA_REGS_V10 \
> + (RKISP1_CIF_ISP_EXP_ROW_NUM_V10 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10)
> +#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V10 516
> +#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V10 35
> +#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V10 390
> +#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V10 28
> +#define RKISP1_CIF_ISP_EXP_MAX_HSIZE_V10 \
> + (RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V10 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 + 1)
> +#define RKISP1_CIF_ISP_EXP_MIN_HSIZE_V10 \
> + (RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V10 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 + 1)
> +#define RKISP1_CIF_ISP_EXP_MAX_VSIZE_V10 \
> + (RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V10 * RKISP1_CIF_ISP_EXP_ROW_NUM_V10 + 1)
> +#define RKISP1_CIF_ISP_EXP_MIN_VSIZE_V10 \
> + (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V10 * RKISP1_CIF_ISP_EXP_ROW_NUM_V10 + 1)
>
> /* LSC: ISP_LSC_CTRL */
> #define RKISP1_CIF_ISP_LSC_CTRL_ENA BIT(0)
> #define RKISP1_CIF_ISP_LSC_SECT_SIZE_RESERVED 0xFC00FC00
> -#define RKISP1_CIF_ISP_LSC_GRAD_RESERVED 0xF000F000
> -#define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED 0xF000F000
> -#define RKISP1_CIF_ISP_LSC_TABLE_DATA(v0, v1) \
> +#define RKISP1_CIF_ISP_LSC_GRAD_RESERVED_V10 0xF000F000
> +#define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED_V10 0xF000F000
> +#define RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(v0, v1) \
> (((v0) & 0xFFF) | (((v1) & 0xFFF) << 12))
> #define RKISP1_CIF_ISP_LSC_SECT_SIZE(v0, v1) \
> (((v0) & 0xFFF) | (((v1) & 0xFFF) << 16))
> @@ -667,18 +696,18 @@
> #define RKISP1_CIF_ISP_GAMMA_B_Y14 (RKISP1_CIF_ISP_BASE + 0x000000E4)
> #define RKISP1_CIF_ISP_GAMMA_B_Y15 (RKISP1_CIF_ISP_BASE + 0x000000E8)
> #define RKISP1_CIF_ISP_GAMMA_B_Y16 (RKISP1_CIF_ISP_BASE + 0x000000EC)
> -#define RKISP1_CIF_ISP_AWB_PROP (RKISP1_CIF_ISP_BASE + 0x00000110)
> -#define RKISP1_CIF_ISP_AWB_WND_H_OFFS (RKISP1_CIF_ISP_BASE + 0x00000114)
> -#define RKISP1_CIF_ISP_AWB_WND_V_OFFS (RKISP1_CIF_ISP_BASE + 0x00000118)
> -#define RKISP1_CIF_ISP_AWB_WND_H_SIZE (RKISP1_CIF_ISP_BASE + 0x0000011C)
> -#define RKISP1_CIF_ISP_AWB_WND_V_SIZE (RKISP1_CIF_ISP_BASE + 0x00000120)
> -#define RKISP1_CIF_ISP_AWB_FRAMES (RKISP1_CIF_ISP_BASE + 0x00000124)
> -#define RKISP1_CIF_ISP_AWB_REF (RKISP1_CIF_ISP_BASE + 0x00000128)
> -#define RKISP1_CIF_ISP_AWB_THRESH (RKISP1_CIF_ISP_BASE + 0x0000012C)
> -#define RKISP1_CIF_ISP_AWB_GAIN_G (RKISP1_CIF_ISP_BASE + 0x00000138)
> -#define RKISP1_CIF_ISP_AWB_GAIN_RB (RKISP1_CIF_ISP_BASE + 0x0000013C)
> -#define RKISP1_CIF_ISP_AWB_WHITE_CNT (RKISP1_CIF_ISP_BASE + 0x00000140)
> -#define RKISP1_CIF_ISP_AWB_MEAN (RKISP1_CIF_ISP_BASE + 0x00000144)
> +#define RKISP1_CIF_ISP_AWB_PROP_V10 (RKISP1_CIF_ISP_BASE + 0x00000110)
> +#define RKISP1_CIF_ISP_AWB_WND_H_OFFS_V10 (RKISP1_CIF_ISP_BASE + 0x00000114)
> +#define RKISP1_CIF_ISP_AWB_WND_V_OFFS_V10 (RKISP1_CIF_ISP_BASE + 0x00000118)
> +#define RKISP1_CIF_ISP_AWB_WND_H_SIZE_V10 (RKISP1_CIF_ISP_BASE + 0x0000011C)
> +#define RKISP1_CIF_ISP_AWB_WND_V_SIZE_V10 (RKISP1_CIF_ISP_BASE + 0x00000120)
> +#define RKISP1_CIF_ISP_AWB_FRAMES_V10 (RKISP1_CIF_ISP_BASE + 0x00000124)
> +#define RKISP1_CIF_ISP_AWB_REF_V10 (RKISP1_CIF_ISP_BASE + 0x00000128)
> +#define RKISP1_CIF_ISP_AWB_THRESH_V10 (RKISP1_CIF_ISP_BASE + 0x0000012C)
> +#define RKISP1_CIF_ISP_AWB_GAIN_G_V10 (RKISP1_CIF_ISP_BASE + 0x00000138)
> +#define RKISP1_CIF_ISP_AWB_GAIN_RB_V10 (RKISP1_CIF_ISP_BASE + 0x0000013C)
> +#define RKISP1_CIF_ISP_AWB_WHITE_CNT_V10 (RKISP1_CIF_ISP_BASE + 0x00000140)
> +#define RKISP1_CIF_ISP_AWB_MEAN_V10 (RKISP1_CIF_ISP_BASE + 0x00000144)
> #define RKISP1_CIF_ISP_CC_COEFF_0 (RKISP1_CIF_ISP_BASE + 0x00000170)
> #define RKISP1_CIF_ISP_CC_COEFF_1 (RKISP1_CIF_ISP_BASE + 0x00000174)
> #define RKISP1_CIF_ISP_CC_COEFF_2 (RKISP1_CIF_ISP_BASE + 0x00000178)
> @@ -712,24 +741,24 @@
> #define RKISP1_CIF_ISP_CT_COEFF_6 (RKISP1_CIF_ISP_BASE + 0x000001E8)
> #define RKISP1_CIF_ISP_CT_COEFF_7 (RKISP1_CIF_ISP_BASE + 0x000001EC)
> #define RKISP1_CIF_ISP_CT_COEFF_8 (RKISP1_CIF_ISP_BASE + 0x000001F0)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_MODE (RKISP1_CIF_ISP_BASE + 0x000001F4)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_0 (RKISP1_CIF_ISP_BASE + 0x000001F8)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_1 (RKISP1_CIF_ISP_BASE + 0x000001FC)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_2 (RKISP1_CIF_ISP_BASE + 0x00000200)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_3 (RKISP1_CIF_ISP_BASE + 0x00000204)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_4 (RKISP1_CIF_ISP_BASE + 0x00000208)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_5 (RKISP1_CIF_ISP_BASE + 0x0000020C)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_6 (RKISP1_CIF_ISP_BASE + 0x00000210)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_7 (RKISP1_CIF_ISP_BASE + 0x00000214)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_8 (RKISP1_CIF_ISP_BASE + 0x00000218)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_9 (RKISP1_CIF_ISP_BASE + 0x0000021C)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_10 (RKISP1_CIF_ISP_BASE + 0x00000220)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_11 (RKISP1_CIF_ISP_BASE + 0x00000224)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_12 (RKISP1_CIF_ISP_BASE + 0x00000228)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_13 (RKISP1_CIF_ISP_BASE + 0x0000022C)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_14 (RKISP1_CIF_ISP_BASE + 0x00000230)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_15 (RKISP1_CIF_ISP_BASE + 0x00000234)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_16 (RKISP1_CIF_ISP_BASE + 0x00000238)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_MODE_V10 (RKISP1_CIF_ISP_BASE + 0x000001F4)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V10 (RKISP1_CIF_ISP_BASE + 0x000001F8)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_1_V10 (RKISP1_CIF_ISP_BASE + 0x000001FC)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_2_V10 (RKISP1_CIF_ISP_BASE + 0x00000200)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_3_V10 (RKISP1_CIF_ISP_BASE + 0x00000204)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_4_V10 (RKISP1_CIF_ISP_BASE + 0x00000208)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_5_V10 (RKISP1_CIF_ISP_BASE + 0x0000020C)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_6_V10 (RKISP1_CIF_ISP_BASE + 0x00000210)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_7_V10 (RKISP1_CIF_ISP_BASE + 0x00000214)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_8_V10 (RKISP1_CIF_ISP_BASE + 0x00000218)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_9_V10 (RKISP1_CIF_ISP_BASE + 0x0000021C)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_10_V10 (RKISP1_CIF_ISP_BASE + 0x00000220)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_11_V10 (RKISP1_CIF_ISP_BASE + 0x00000224)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_12_V10 (RKISP1_CIF_ISP_BASE + 0x00000228)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_13_V10 (RKISP1_CIF_ISP_BASE + 0x0000022C)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_14_V10 (RKISP1_CIF_ISP_BASE + 0x00000230)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_15_V10 (RKISP1_CIF_ISP_BASE + 0x00000234)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_16_V10 (RKISP1_CIF_ISP_BASE + 0x00000238)
> #define RKISP1_CIF_ISP_ERR (RKISP1_CIF_ISP_BASE + 0x0000023C)
> #define RKISP1_CIF_ISP_ERR_CLR (RKISP1_CIF_ISP_BASE + 0x00000240)
> #define RKISP1_CIF_ISP_FRAME_COUNT (RKISP1_CIF_ISP_BASE + 0x00000244)
> @@ -1005,36 +1034,35 @@
> #define RKISP1_CIF_ISP_IS_H_SIZE_SHD (RKISP1_CIF_ISP_IS_BASE + 0x0000002C)
> #define RKISP1_CIF_ISP_IS_V_SIZE_SHD (RKISP1_CIF_ISP_IS_BASE + 0x00000030)
>
> -#define RKISP1_CIF_ISP_HIST_BASE 0x00002400
> -
> -#define RKISP1_CIF_ISP_HIST_PROP (RKISP1_CIF_ISP_HIST_BASE + 0x00000000)
> -#define RKISP1_CIF_ISP_HIST_H_OFFS (RKISP1_CIF_ISP_HIST_BASE + 0x00000004)
> -#define RKISP1_CIF_ISP_HIST_V_OFFS (RKISP1_CIF_ISP_HIST_BASE + 0x00000008)
> -#define RKISP1_CIF_ISP_HIST_H_SIZE (RKISP1_CIF_ISP_HIST_BASE + 0x0000000C)
> -#define RKISP1_CIF_ISP_HIST_V_SIZE (RKISP1_CIF_ISP_HIST_BASE + 0x00000010)
> -#define RKISP1_CIF_ISP_HIST_BIN_0 (RKISP1_CIF_ISP_HIST_BASE + 0x00000014)
> -#define RKISP1_CIF_ISP_HIST_BIN_1 (RKISP1_CIF_ISP_HIST_BASE + 0x00000018)
> -#define RKISP1_CIF_ISP_HIST_BIN_2 (RKISP1_CIF_ISP_HIST_BASE + 0x0000001C)
> -#define RKISP1_CIF_ISP_HIST_BIN_3 (RKISP1_CIF_ISP_HIST_BASE + 0x00000020)
> -#define RKISP1_CIF_ISP_HIST_BIN_4 (RKISP1_CIF_ISP_HIST_BASE + 0x00000024)
> -#define RKISP1_CIF_ISP_HIST_BIN_5 (RKISP1_CIF_ISP_HIST_BASE + 0x00000028)
> -#define RKISP1_CIF_ISP_HIST_BIN_6 (RKISP1_CIF_ISP_HIST_BASE + 0x0000002C)
> -#define RKISP1_CIF_ISP_HIST_BIN_7 (RKISP1_CIF_ISP_HIST_BASE + 0x00000030)
> -#define RKISP1_CIF_ISP_HIST_BIN_8 (RKISP1_CIF_ISP_HIST_BASE + 0x00000034)
> -#define RKISP1_CIF_ISP_HIST_BIN_9 (RKISP1_CIF_ISP_HIST_BASE + 0x00000038)
> -#define RKISP1_CIF_ISP_HIST_BIN_10 (RKISP1_CIF_ISP_HIST_BASE + 0x0000003C)
> -#define RKISP1_CIF_ISP_HIST_BIN_11 (RKISP1_CIF_ISP_HIST_BASE + 0x00000040)
> -#define RKISP1_CIF_ISP_HIST_BIN_12 (RKISP1_CIF_ISP_HIST_BASE + 0x00000044)
> -#define RKISP1_CIF_ISP_HIST_BIN_13 (RKISP1_CIF_ISP_HIST_BASE + 0x00000048)
> -#define RKISP1_CIF_ISP_HIST_BIN_14 (RKISP1_CIF_ISP_HIST_BASE + 0x0000004C)
> -#define RKISP1_CIF_ISP_HIST_BIN_15 (RKISP1_CIF_ISP_HIST_BASE + 0x00000050)
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_00TO30 (RKISP1_CIF_ISP_HIST_BASE + 0x00000054)
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_40TO21 (RKISP1_CIF_ISP_HIST_BASE + 0x00000058)
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_31TO12 (RKISP1_CIF_ISP_HIST_BASE + 0x0000005C)
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_22TO03 (RKISP1_CIF_ISP_HIST_BASE + 0x00000060)
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_13TO43 (RKISP1_CIF_ISP_HIST_BASE + 0x00000064)
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_04TO34 (RKISP1_CIF_ISP_HIST_BASE + 0x00000068)
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_44 (RKISP1_CIF_ISP_HIST_BASE + 0x0000006C)
> +#define RKISP1_CIF_ISP_HIST_BASE_V10 0x00002400
> +#define RKISP1_CIF_ISP_HIST_PROP_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000000)
> +#define RKISP1_CIF_ISP_HIST_H_OFFS_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000004)
> +#define RKISP1_CIF_ISP_HIST_V_OFFS_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000008)
> +#define RKISP1_CIF_ISP_HIST_H_SIZE_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000000C)
> +#define RKISP1_CIF_ISP_HIST_V_SIZE_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000010)
> +#define RKISP1_CIF_ISP_HIST_BIN_0_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000014)
> +#define RKISP1_CIF_ISP_HIST_BIN_1_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000018)
> +#define RKISP1_CIF_ISP_HIST_BIN_2_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000001C)
> +#define RKISP1_CIF_ISP_HIST_BIN_3_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000020)
> +#define RKISP1_CIF_ISP_HIST_BIN_4_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000024)
> +#define RKISP1_CIF_ISP_HIST_BIN_5_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000028)
> +#define RKISP1_CIF_ISP_HIST_BIN_6_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000002C)
> +#define RKISP1_CIF_ISP_HIST_BIN_7_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000030)
> +#define RKISP1_CIF_ISP_HIST_BIN_8_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000034)
> +#define RKISP1_CIF_ISP_HIST_BIN_9_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000038)
> +#define RKISP1_CIF_ISP_HIST_BIN_10_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000003C)
> +#define RKISP1_CIF_ISP_HIST_BIN_11_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000040)
> +#define RKISP1_CIF_ISP_HIST_BIN_12_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000044)
> +#define RKISP1_CIF_ISP_HIST_BIN_13_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000048)
> +#define RKISP1_CIF_ISP_HIST_BIN_14_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000004C)
> +#define RKISP1_CIF_ISP_HIST_BIN_15_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000050)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_00TO30_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000054)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_40TO21_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000058)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_31TO12_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000005C)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_22TO03_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000060)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_13TO43_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000064)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_04TO34_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000068)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_44_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000006C)
>
> #define RKISP1_CIF_ISP_FILT_BASE 0x00002500
> #define RKISP1_CIF_ISP_FILT_MODE (RKISP1_CIF_ISP_FILT_BASE + 0x00000000)
> @@ -1060,35 +1088,35 @@
>
> #define RKISP1_CIF_ISP_EXP_BASE 0x00002600
> #define RKISP1_CIF_ISP_EXP_CTRL (RKISP1_CIF_ISP_EXP_BASE + 0x00000000)
> -#define RKISP1_CIF_ISP_EXP_H_OFFSET (RKISP1_CIF_ISP_EXP_BASE + 0x00000004)
> -#define RKISP1_CIF_ISP_EXP_V_OFFSET (RKISP1_CIF_ISP_EXP_BASE + 0x00000008)
> -#define RKISP1_CIF_ISP_EXP_H_SIZE (RKISP1_CIF_ISP_EXP_BASE + 0x0000000C)
> -#define RKISP1_CIF_ISP_EXP_V_SIZE (RKISP1_CIF_ISP_EXP_BASE + 0x00000010)
> -#define RKISP1_CIF_ISP_EXP_MEAN_00 (RKISP1_CIF_ISP_EXP_BASE + 0x00000014)
> -#define RKISP1_CIF_ISP_EXP_MEAN_10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000018)
> -#define RKISP1_CIF_ISP_EXP_MEAN_20 (RKISP1_CIF_ISP_EXP_BASE + 0x0000001c)
> -#define RKISP1_CIF_ISP_EXP_MEAN_30 (RKISP1_CIF_ISP_EXP_BASE + 0x00000020)
> -#define RKISP1_CIF_ISP_EXP_MEAN_40 (RKISP1_CIF_ISP_EXP_BASE + 0x00000024)
> -#define RKISP1_CIF_ISP_EXP_MEAN_01 (RKISP1_CIF_ISP_EXP_BASE + 0x00000028)
> -#define RKISP1_CIF_ISP_EXP_MEAN_11 (RKISP1_CIF_ISP_EXP_BASE + 0x0000002c)
> -#define RKISP1_CIF_ISP_EXP_MEAN_21 (RKISP1_CIF_ISP_EXP_BASE + 0x00000030)
> -#define RKISP1_CIF_ISP_EXP_MEAN_31 (RKISP1_CIF_ISP_EXP_BASE + 0x00000034)
> -#define RKISP1_CIF_ISP_EXP_MEAN_41 (RKISP1_CIF_ISP_EXP_BASE + 0x00000038)
> -#define RKISP1_CIF_ISP_EXP_MEAN_02 (RKISP1_CIF_ISP_EXP_BASE + 0x0000003c)
> -#define RKISP1_CIF_ISP_EXP_MEAN_12 (RKISP1_CIF_ISP_EXP_BASE + 0x00000040)
> -#define RKISP1_CIF_ISP_EXP_MEAN_22 (RKISP1_CIF_ISP_EXP_BASE + 0x00000044)
> -#define RKISP1_CIF_ISP_EXP_MEAN_32 (RKISP1_CIF_ISP_EXP_BASE + 0x00000048)
> -#define RKISP1_CIF_ISP_EXP_MEAN_42 (RKISP1_CIF_ISP_EXP_BASE + 0x0000004c)
> -#define RKISP1_CIF_ISP_EXP_MEAN_03 (RKISP1_CIF_ISP_EXP_BASE + 0x00000050)
> -#define RKISP1_CIF_ISP_EXP_MEAN_13 (RKISP1_CIF_ISP_EXP_BASE + 0x00000054)
> -#define RKISP1_CIF_ISP_EXP_MEAN_23 (RKISP1_CIF_ISP_EXP_BASE + 0x00000058)
> -#define RKISP1_CIF_ISP_EXP_MEAN_33 (RKISP1_CIF_ISP_EXP_BASE + 0x0000005c)
> -#define RKISP1_CIF_ISP_EXP_MEAN_43 (RKISP1_CIF_ISP_EXP_BASE + 0x00000060)
> -#define RKISP1_CIF_ISP_EXP_MEAN_04 (RKISP1_CIF_ISP_EXP_BASE + 0x00000064)
> -#define RKISP1_CIF_ISP_EXP_MEAN_14 (RKISP1_CIF_ISP_EXP_BASE + 0x00000068)
> -#define RKISP1_CIF_ISP_EXP_MEAN_24 (RKISP1_CIF_ISP_EXP_BASE + 0x0000006c)
> -#define RKISP1_CIF_ISP_EXP_MEAN_34 (RKISP1_CIF_ISP_EXP_BASE + 0x00000070)
> -#define RKISP1_CIF_ISP_EXP_MEAN_44 (RKISP1_CIF_ISP_EXP_BASE + 0x00000074)
> +#define RKISP1_CIF_ISP_EXP_H_OFFSET_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000004)
> +#define RKISP1_CIF_ISP_EXP_V_OFFSET_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000008)
> +#define RKISP1_CIF_ISP_EXP_H_SIZE_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000000C)
> +#define RKISP1_CIF_ISP_EXP_V_SIZE_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000010)
> +#define RKISP1_CIF_ISP_EXP_MEAN_00_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000014)
> +#define RKISP1_CIF_ISP_EXP_MEAN_10_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000018)
> +#define RKISP1_CIF_ISP_EXP_MEAN_20_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000001c)
> +#define RKISP1_CIF_ISP_EXP_MEAN_30_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000020)
> +#define RKISP1_CIF_ISP_EXP_MEAN_40_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000024)
> +#define RKISP1_CIF_ISP_EXP_MEAN_01_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000028)
> +#define RKISP1_CIF_ISP_EXP_MEAN_11_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000002c)
> +#define RKISP1_CIF_ISP_EXP_MEAN_21_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000030)
> +#define RKISP1_CIF_ISP_EXP_MEAN_31_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000034)
> +#define RKISP1_CIF_ISP_EXP_MEAN_41_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000038)
> +#define RKISP1_CIF_ISP_EXP_MEAN_02_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000003c)
> +#define RKISP1_CIF_ISP_EXP_MEAN_12_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000040)
> +#define RKISP1_CIF_ISP_EXP_MEAN_22_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000044)
> +#define RKISP1_CIF_ISP_EXP_MEAN_32_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000048)
> +#define RKISP1_CIF_ISP_EXP_MEAN_42_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000004c)
> +#define RKISP1_CIF_ISP_EXP_MEAN_03_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000050)
> +#define RKISP1_CIF_ISP_EXP_MEAN_13_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000054)
> +#define RKISP1_CIF_ISP_EXP_MEAN_23_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000058)
> +#define RKISP1_CIF_ISP_EXP_MEAN_33_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000005c)
> +#define RKISP1_CIF_ISP_EXP_MEAN_43_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000060)
> +#define RKISP1_CIF_ISP_EXP_MEAN_04_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000064)
> +#define RKISP1_CIF_ISP_EXP_MEAN_14_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000068)
> +#define RKISP1_CIF_ISP_EXP_MEAN_24_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000006c)
> +#define RKISP1_CIF_ISP_EXP_MEAN_34_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000070)
> +#define RKISP1_CIF_ISP_EXP_MEAN_44_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000074)
>
> #define RKISP1_CIF_ISP_BLS_BASE 0x00002700
> #define RKISP1_CIF_ISP_BLS_CTRL (RKISP1_CIF_ISP_BLS_BASE + 0x00000000)
> @@ -1260,4 +1288,7 @@
> #define RKISP1_CIF_ISP_VSM_DELTA_H (RKISP1_CIF_ISP_VSM_BASE + 0x0000001C)
> #define RKISP1_CIF_ISP_VSM_DELTA_V (RKISP1_CIF_ISP_VSM_BASE + 0x00000020)
>
> +#define RKISP1_CIF_ISP_CSI0_BASE 0x00007000
> +#define RKISP1_CIF_ISP_CSI0_CTRL0 (RKISP1_CIF_ISP_CSI0_BASE + 0x00000000)
> +
> #endif /* _RKISP1_REGS_H */
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> index f68a5e78e54a..3f286c55ad60 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> @@ -175,18 +175,18 @@ rkisp1_stats_init_vb2_queue(struct vb2_queue *q, struct rkisp1_stats *stats)
> return vb2_queue_init(q);
> }
>
> -static void rkisp1_stats_get_awb_meas(struct rkisp1_stats *stats,
> - struct rkisp1_stat_buffer *pbuf)
> +static void rkisp1_stats_get_awb_meas_v10(struct rkisp1_stats *stats,
> + struct rkisp1_stat_buffer *pbuf)
> {
> /* Protect against concurrent access from ISR? */
> struct rkisp1_device *rkisp1 = stats->rkisp1;
> u32 reg_val;
>
> pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AWB;
> - reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_WHITE_CNT);
> + reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_WHITE_CNT_V10);
> pbuf->params.awb.awb_mean[0].cnt =
> RKISP1_CIF_ISP_AWB_GET_PIXEL_CNT(reg_val);
> - reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_MEAN);
> + reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_MEAN_V10);
>
> pbuf->params.awb.awb_mean[0].mean_cr_or_r =
> RKISP1_CIF_ISP_AWB_GET_MEAN_CR_R(reg_val);
> @@ -196,8 +196,8 @@ static void rkisp1_stats_get_awb_meas(struct rkisp1_stats *stats,
> RKISP1_CIF_ISP_AWB_GET_MEAN_Y_G(reg_val);
> }
>
> -static void rkisp1_stats_get_aec_meas(struct rkisp1_stats *stats,
> - struct rkisp1_stat_buffer *pbuf)
> +static void rkisp1_stats_get_aec_meas_v10(struct rkisp1_stats *stats,
> + struct rkisp1_stat_buffer *pbuf)
> {
> struct rkisp1_device *rkisp1 = stats->rkisp1;
> unsigned int i;
> @@ -206,7 +206,7 @@ static void rkisp1_stats_get_aec_meas(struct rkisp1_stats *stats,
> for (i = 0; i < RKISP1_CIF_ISP_AE_MEAN_MAX_V10; i++)
> pbuf->params.ae.exp_mean[i] =
> (u8)rkisp1_read(rkisp1,
> - RKISP1_CIF_ISP_EXP_MEAN_00 + i * 4);
> + RKISP1_CIF_ISP_EXP_MEAN_00_V10 + i * 4);
> }
>
> static void rkisp1_stats_get_afc_meas(struct rkisp1_stats *stats,
> @@ -226,17 +226,17 @@ static void rkisp1_stats_get_afc_meas(struct rkisp1_stats *stats,
> af->window[2].lum = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AFM_LUM_C);
> }
>
> -static void rkisp1_stats_get_hst_meas(struct rkisp1_stats *stats,
> - struct rkisp1_stat_buffer *pbuf)
> +static void rkisp1_stats_get_hst_meas_v10(struct rkisp1_stats *stats,
> + struct rkisp1_stat_buffer *pbuf)
> {
> struct rkisp1_device *rkisp1 = stats->rkisp1;
> unsigned int i;
>
> pbuf->meas_type |= RKISP1_CIF_ISP_STAT_HIST;
> for (i = 0; i < RKISP1_CIF_ISP_HIST_BIN_N_MAX_V10; i++) {
> - u32 reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_HIST_BIN_0 + i * 4);
> + u32 reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_HIST_BIN_0_V10 + i * 4);
>
> - pbuf->params.hist.hist_bins[i] = RKISP1_CIF_ISP_HIST_GET_BIN(reg_val);
> + pbuf->params.hist.hist_bins[i] = RKISP1_CIF_ISP_HIST_GET_BIN_V10(reg_val);
> }
> }
>
> @@ -287,10 +287,10 @@ static void rkisp1_stats_get_bls_meas(struct rkisp1_stats *stats,
> }
> }
>
> -static struct rkisp1_stats_ops rkisp1_stats_ops = {
> - .get_awb_meas = rkisp1_stats_get_awb_meas,
> - .get_aec_meas = rkisp1_stats_get_aec_meas,
> - .get_hst_meas = rkisp1_stats_get_hst_meas,
> +static struct rkisp1_stats_ops rkisp1_v10_stats_ops = {
> + .get_awb_meas = rkisp1_stats_get_awb_meas_v10,
> + .get_aec_meas = rkisp1_stats_get_aec_meas_v10,
> + .get_hst_meas = rkisp1_stats_get_hst_meas_v10,
> };
>
> static void
> @@ -361,7 +361,7 @@ static void rkisp1_init_stats(struct rkisp1_stats *stats)
> stats->vdev_fmt.fmt.meta.buffersize =
> sizeof(struct rkisp1_stat_buffer);
>
> - stats->ops = &rkisp1_stats_ops;
> + stats->ops = &rkisp1_v10_stats_ops;
> }
>
> int rkisp1_stats_register(struct rkisp1_device *rkisp1)
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 5/7] media: rockchip: rkisp1: add prefixes for v10 specific parts
@ 2021-06-15 6:06 ` Dafna Hirschfeld
0 siblings, 0 replies; 38+ messages in thread
From: Dafna Hirschfeld @ 2021-06-15 6:06 UTC (permalink / raw)
To: Heiko Stuebner, mchehab, hverkuil-cisco
Cc: ezequiel, helen.koike, Laurent.pinchart, linux-rockchip,
linux-media, Heiko Stuebner
Hi,
On 15.06.21 03:37, Heiko Stuebner wrote:
> From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
>
> The rkisp1 evolved over soc generations and the rk3326/px30 introduced
> the so called v12 - probably meaning v1.2.
>
> In a first step adapt the affected v10 parts to give them a
> matching suffix to enable us to add v12 variants later on.
>
> Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> ---
> .../platform/rockchip/rkisp1/rkisp1-params.c | 180 +++++------
> .../platform/rockchip/rkisp1/rkisp1-regs.h | 295 ++++++++++--------
> .../platform/rockchip/rkisp1/rkisp1-stats.c | 32 +-
> 3 files changed, 269 insertions(+), 238 deletions(-)
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> index a971892ba81d..427c7cc400b2 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> @@ -185,8 +185,8 @@ static void rkisp1_bls_config(struct rkisp1_params *params,
>
> /* ISP LS correction interface function */
> static void
> -rkisp1_lsc_matrix_config(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_lsc_config *pconfig)
> +rkisp1_lsc_matrix_config_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_lsc_config *pconfig)
> {
> unsigned int isp_lsc_status, sram_addr, isp_lsc_table_sel, i, j, data;
>
> @@ -212,39 +212,39 @@ rkisp1_lsc_matrix_config(struct rkisp1_params *params,
> * DWORDs (2nd value of last DWORD unused)
> */
> for (j = 0; j < RKISP1_CIF_ISP_LSC_SAMPLES_MAX - 1; j += 2) {
> - data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->r_data_tbl[i][j],
> - pconfig->r_data_tbl[i][j + 1]);
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->r_data_tbl[i][j],
> + pconfig->r_data_tbl[i][j + 1]);
> rkisp1_write(params->rkisp1, data,
> RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
>
> - data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->gr_data_tbl[i][j],
> - pconfig->gr_data_tbl[i][j + 1]);
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->gr_data_tbl[i][j],
> + pconfig->gr_data_tbl[i][j + 1]);
> rkisp1_write(params->rkisp1, data,
> RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
>
> - data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->gb_data_tbl[i][j],
> - pconfig->gb_data_tbl[i][j + 1]);
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->gb_data_tbl[i][j],
> + pconfig->gb_data_tbl[i][j + 1]);
> rkisp1_write(params->rkisp1, data,
> RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
>
> - data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->b_data_tbl[i][j],
> - pconfig->b_data_tbl[i][j + 1]);
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->b_data_tbl[i][j],
> + pconfig->b_data_tbl[i][j + 1]);
> rkisp1_write(params->rkisp1, data,
> RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
> }
> - data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->r_data_tbl[i][j], 0);
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->r_data_tbl[i][j], 0);
> rkisp1_write(params->rkisp1, data,
> RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
>
> - data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->gr_data_tbl[i][j], 0);
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->gr_data_tbl[i][j], 0);
> rkisp1_write(params->rkisp1, data,
> RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
>
> - data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->gb_data_tbl[i][j], 0);
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->gb_data_tbl[i][j], 0);
> rkisp1_write(params->rkisp1, data,
> RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
>
> - data = RKISP1_CIF_ISP_LSC_TABLE_DATA(pconfig->b_data_tbl[i][j], 0);
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(pconfig->b_data_tbl[i][j], 0);
> rkisp1_write(params->rkisp1, data,
> RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
> }
> @@ -382,18 +382,18 @@ static void rkisp1_sdg_config(struct rkisp1_params *params,
> }
>
> /* ISP GAMMA correction interface function */
> -static void rkisp1_goc_config(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_goc_config *arg)
> +static void rkisp1_goc_config_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_goc_config *arg)
> {
> unsigned int i;
>
> rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
> RKISP1_CIF_ISP_CTRL_ISP_GAMMA_OUT_ENA);
> - rkisp1_write(params->rkisp1, arg->mode, RKISP1_CIF_ISP_GAMMA_OUT_MODE);
> + rkisp1_write(params->rkisp1, arg->mode, RKISP1_CIF_ISP_GAMMA_OUT_MODE_V10);
>
> for (i = 0; i < RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10; i++)
> rkisp1_write(params->rkisp1, arg->gamma_y[i],
> - RKISP1_CIF_ISP_GAMMA_OUT_Y_0 + i * 4);
> + RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V10 + i * 4);
> }
>
> /* ISP Cross Talk */
> @@ -433,8 +433,8 @@ static void rkisp1_ctk_enable(struct rkisp1_params *params, bool en)
> }
>
> /* ISP White Balance Mode */
> -static void rkisp1_awb_meas_config(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_awb_meas_config *arg)
> +static void rkisp1_awb_meas_config_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_meas_config *arg)
> {
> u32 reg_val = 0;
> /* based on the mode,configure the awb module */
> @@ -442,43 +442,43 @@ static void rkisp1_awb_meas_config(struct rkisp1_params *params,
> /* Reference Cb and Cr */
> rkisp1_write(params->rkisp1,
> RKISP1_CIF_ISP_AWB_REF_CR_SET(arg->awb_ref_cr) |
> - arg->awb_ref_cb, RKISP1_CIF_ISP_AWB_REF);
> + arg->awb_ref_cb, RKISP1_CIF_ISP_AWB_REF_V10);
> /* Yc Threshold */
> rkisp1_write(params->rkisp1,
> RKISP1_CIF_ISP_AWB_MAX_Y_SET(arg->max_y) |
> RKISP1_CIF_ISP_AWB_MIN_Y_SET(arg->min_y) |
> RKISP1_CIF_ISP_AWB_MAX_CS_SET(arg->max_csum) |
> - arg->min_c, RKISP1_CIF_ISP_AWB_THRESH);
> + arg->min_c, RKISP1_CIF_ISP_AWB_THRESH_V10);
> }
>
> - reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP);
> + reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V10);
> if (arg->enable_ymax_cmp)
> reg_val |= RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
> else
> reg_val &= ~RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
> - rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP);
> + rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V10);
>
> /* window offset */
> rkisp1_write(params->rkisp1,
> - arg->awb_wnd.v_offs, RKISP1_CIF_ISP_AWB_WND_V_OFFS);
> + arg->awb_wnd.v_offs, RKISP1_CIF_ISP_AWB_WND_V_OFFS_V10);
> rkisp1_write(params->rkisp1,
> - arg->awb_wnd.h_offs, RKISP1_CIF_ISP_AWB_WND_H_OFFS);
> + arg->awb_wnd.h_offs, RKISP1_CIF_ISP_AWB_WND_H_OFFS_V10);
> /* AWB window size */
> rkisp1_write(params->rkisp1,
> - arg->awb_wnd.v_size, RKISP1_CIF_ISP_AWB_WND_V_SIZE);
> + arg->awb_wnd.v_size, RKISP1_CIF_ISP_AWB_WND_V_SIZE_V10);
> rkisp1_write(params->rkisp1,
> - arg->awb_wnd.h_size, RKISP1_CIF_ISP_AWB_WND_H_SIZE);
> + arg->awb_wnd.h_size, RKISP1_CIF_ISP_AWB_WND_H_SIZE_V10);
> /* Number of frames */
> rkisp1_write(params->rkisp1,
> - arg->frames, RKISP1_CIF_ISP_AWB_FRAMES);
> + arg->frames, RKISP1_CIF_ISP_AWB_FRAMES_V10);
> }
>
> static void
> -rkisp1_awb_meas_enable(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_awb_meas_config *arg,
> - bool en)
> +rkisp1_awb_meas_enable_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_meas_config *arg,
> + bool en)
> {
> - u32 reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP);
> + u32 reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V10);
>
> /* switch off */
> reg_val &= RKISP1_CIF_ISP_AWB_MODE_MASK_NONE;
> @@ -489,34 +489,34 @@ rkisp1_awb_meas_enable(struct rkisp1_params *params,
> else
> reg_val |= RKISP1_CIF_ISP_AWB_MODE_YCBCR_EN;
>
> - rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP);
> + rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V10);
>
> /* Measurements require AWB block be active. */
> rkisp1_param_set_bits(params, RKISP1_CIF_ISP_CTRL,
> RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
> } else {
> rkisp1_write(params->rkisp1,
> - reg_val, RKISP1_CIF_ISP_AWB_PROP);
> + reg_val, RKISP1_CIF_ISP_AWB_PROP_V10);
> rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
> RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
> }
> }
>
> static void
> -rkisp1_awb_gain_config(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_awb_gain_config *arg)
> +rkisp1_awb_gain_config_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_gain_config *arg)
> {
> rkisp1_write(params->rkisp1,
> RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_green_r) |
> - arg->gain_green_b, RKISP1_CIF_ISP_AWB_GAIN_G);
> + arg->gain_green_b, RKISP1_CIF_ISP_AWB_GAIN_G_V10);
>
> rkisp1_write(params->rkisp1,
> RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_red) |
> - arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB);
> + arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB_V10);
> }
>
> -static void rkisp1_aec_config(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_aec_config *arg)
> +static void rkisp1_aec_config_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_aec_config *arg)
> {
> unsigned int block_hsize, block_vsize;
> u32 exp_ctrl;
> @@ -531,21 +531,21 @@ static void rkisp1_aec_config(struct rkisp1_params *params,
> rkisp1_write(params->rkisp1, exp_ctrl, RKISP1_CIF_ISP_EXP_CTRL);
>
> rkisp1_write(params->rkisp1,
> - arg->meas_window.h_offs, RKISP1_CIF_ISP_EXP_H_OFFSET);
> + arg->meas_window.h_offs, RKISP1_CIF_ISP_EXP_H_OFFSET_V10);
> rkisp1_write(params->rkisp1,
> - arg->meas_window.v_offs, RKISP1_CIF_ISP_EXP_V_OFFSET);
> + arg->meas_window.v_offs, RKISP1_CIF_ISP_EXP_V_OFFSET_V10);
>
> block_hsize = arg->meas_window.h_size /
> - RKISP1_CIF_ISP_EXP_COLUMN_NUM - 1;
> + RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 - 1;
> block_vsize = arg->meas_window.v_size /
> - RKISP1_CIF_ISP_EXP_ROW_NUM - 1;
> + RKISP1_CIF_ISP_EXP_ROW_NUM_V10 - 1;
>
> rkisp1_write(params->rkisp1,
> - RKISP1_CIF_ISP_EXP_H_SIZE_SET(block_hsize),
> - RKISP1_CIF_ISP_EXP_H_SIZE);
> + RKISP1_CIF_ISP_EXP_H_SIZE_SET_V10(block_hsize),
> + RKISP1_CIF_ISP_EXP_H_SIZE_V10);
> rkisp1_write(params->rkisp1,
> - RKISP1_CIF_ISP_EXP_V_SIZE_SET(block_vsize),
> - RKISP1_CIF_ISP_EXP_V_SIZE);
> + RKISP1_CIF_ISP_EXP_V_SIZE_SET_V10(block_vsize),
> + RKISP1_CIF_ISP_EXP_V_SIZE_V10);
> }
>
> static void rkisp1_cproc_config(struct rkisp1_params *params,
> @@ -578,73 +578,73 @@ static void rkisp1_cproc_config(struct rkisp1_params *params,
> }
> }
>
> -static void rkisp1_hst_config(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_hst_config *arg)
> +static void rkisp1_hst_config_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_hst_config *arg)
> {
> unsigned int block_hsize, block_vsize;
> static const u32 hist_weight_regs[] = {
> - RKISP1_CIF_ISP_HIST_WEIGHT_00TO30,
> - RKISP1_CIF_ISP_HIST_WEIGHT_40TO21,
> - RKISP1_CIF_ISP_HIST_WEIGHT_31TO12,
> - RKISP1_CIF_ISP_HIST_WEIGHT_22TO03,
> - RKISP1_CIF_ISP_HIST_WEIGHT_13TO43,
> - RKISP1_CIF_ISP_HIST_WEIGHT_04TO34,
> + RKISP1_CIF_ISP_HIST_WEIGHT_00TO30_V10,
> + RKISP1_CIF_ISP_HIST_WEIGHT_40TO21_V10,
> + RKISP1_CIF_ISP_HIST_WEIGHT_31TO12_V10,
> + RKISP1_CIF_ISP_HIST_WEIGHT_22TO03_V10,
> + RKISP1_CIF_ISP_HIST_WEIGHT_13TO43_V10,
> + RKISP1_CIF_ISP_HIST_WEIGHT_04TO34_V10,
> };
> const u8 *weight;
> unsigned int i;
> u32 hist_prop;
>
> /* avoid to override the old enable value */
> - hist_prop = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_HIST_PROP);
> - hist_prop &= RKISP1_CIF_ISP_HIST_PROP_MODE_MASK;
> - hist_prop |= RKISP1_CIF_ISP_HIST_PREDIV_SET(arg->histogram_predivider);
> - rkisp1_write(params->rkisp1, hist_prop, RKISP1_CIF_ISP_HIST_PROP);
> + hist_prop = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_HIST_PROP_V10);
> + hist_prop &= RKISP1_CIF_ISP_HIST_PROP_MODE_MASK_V10;
> + hist_prop |= RKISP1_CIF_ISP_HIST_PREDIV_SET_V10(arg->histogram_predivider);
> + rkisp1_write(params->rkisp1, hist_prop, RKISP1_CIF_ISP_HIST_PROP_V10);
> rkisp1_write(params->rkisp1,
> arg->meas_window.h_offs,
> - RKISP1_CIF_ISP_HIST_H_OFFS);
> + RKISP1_CIF_ISP_HIST_H_OFFS_V10);
> rkisp1_write(params->rkisp1,
> arg->meas_window.v_offs,
> - RKISP1_CIF_ISP_HIST_V_OFFS);
> + RKISP1_CIF_ISP_HIST_V_OFFS_V10);
>
> block_hsize = arg->meas_window.h_size /
> - RKISP1_CIF_ISP_HIST_COLUMN_NUM - 1;
> - block_vsize = arg->meas_window.v_size / RKISP1_CIF_ISP_HIST_ROW_NUM - 1;
> + RKISP1_CIF_ISP_HIST_COLUMN_NUM_V10 - 1;
> + block_vsize = arg->meas_window.v_size / RKISP1_CIF_ISP_HIST_ROW_NUM_V10 - 1;
>
> - rkisp1_write(params->rkisp1, block_hsize, RKISP1_CIF_ISP_HIST_H_SIZE);
> - rkisp1_write(params->rkisp1, block_vsize, RKISP1_CIF_ISP_HIST_V_SIZE);
> + rkisp1_write(params->rkisp1, block_hsize, RKISP1_CIF_ISP_HIST_H_SIZE_V10);
> + rkisp1_write(params->rkisp1, block_vsize, RKISP1_CIF_ISP_HIST_V_SIZE_V10);
>
> weight = arg->hist_weight;
> for (i = 0; i < ARRAY_SIZE(hist_weight_regs); ++i, weight += 4)
> rkisp1_write(params->rkisp1,
> - RKISP1_CIF_ISP_HIST_WEIGHT_SET(weight[0],
> + RKISP1_CIF_ISP_HIST_WEIGHT_SET_V10(weight[0],
> weight[1],
> weight[2],
> weight[3]),
> hist_weight_regs[i]);
>
> - rkisp1_write(params->rkisp1, weight[0] & 0x1F, RKISP1_CIF_ISP_HIST_WEIGHT_44);
> + rkisp1_write(params->rkisp1, weight[0] & 0x1F, RKISP1_CIF_ISP_HIST_WEIGHT_44_V10);
> }
>
> static void
> -rkisp1_hst_enable(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_hst_config *arg, bool en)
> +rkisp1_hst_enable_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_hst_config *arg, bool en)
> {
> if (en) {
> u32 hist_prop = rkisp1_read(params->rkisp1,
> - RKISP1_CIF_ISP_HIST_PROP);
> + RKISP1_CIF_ISP_HIST_PROP_V10);
>
> - hist_prop &= ~RKISP1_CIF_ISP_HIST_PROP_MODE_MASK;
> + hist_prop &= ~RKISP1_CIF_ISP_HIST_PROP_MODE_MASK_V10;
> hist_prop |= arg->mode;
> - rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP,
> + rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP_V10,
> hist_prop);
> } else {
> - rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_HIST_PROP,
> - RKISP1_CIF_ISP_HIST_PROP_MODE_MASK);
> + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_HIST_PROP_V10,
> + RKISP1_CIF_ISP_HIST_PROP_MODE_MASK_V10);
> }
> }
>
> -static void rkisp1_afm_config(struct rkisp1_params *params,
> - const struct rkisp1_cif_isp_afc_config *arg)
> +static void rkisp1_afm_config_v10(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_afc_config *arg)
> {
> size_t num_of_win = min_t(size_t, ARRAY_SIZE(arg->afm_win),
> arg->num_afm_win);
> @@ -1234,7 +1234,7 @@ static void rkisp1_params_config_parameter(struct rkisp1_params *params)
>
> memset(hst.hist_weight, 0x01, sizeof(hst.hist_weight));
> params->ops->hst_config(params, &hst);
> - rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP,
> + rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP_V10,
> rkisp1_hst_params_default_config.mode);
>
> /* set the range */
> @@ -1293,16 +1293,16 @@ void rkisp1_params_disable(struct rkisp1_params *params)
> RKISP1_CIF_ISP_DPF_MODE_EN);
> }
>
> -static struct rkisp1_params_ops rkisp1_params_ops = {
> - .lsc_matrix_config = rkisp1_lsc_matrix_config,
> - .goc_config = rkisp1_goc_config,
> - .awb_meas_config = rkisp1_awb_meas_config,
> - .awb_meas_enable = rkisp1_awb_meas_enable,
> - .awb_gain_config = rkisp1_awb_gain_config,
> - .aec_config = rkisp1_aec_config,
> - .hst_config = rkisp1_hst_config,
> - .hst_enable = rkisp1_hst_enable,
> - .afm_config = rkisp1_afm_config,
> +static struct rkisp1_params_ops rkisp1_v10_params_ops = {
> + .lsc_matrix_config = rkisp1_lsc_matrix_config_v10,
> + .goc_config = rkisp1_goc_config_v10,
> + .awb_meas_config = rkisp1_awb_meas_config_v10,
> + .awb_meas_enable = rkisp1_awb_meas_enable_v10,
> + .awb_gain_config = rkisp1_awb_gain_config_v10,
> + .aec_config = rkisp1_aec_config_v10,
> + .hst_config = rkisp1_hst_config_v10,
> + .hst_enable = rkisp1_hst_enable_v10,
> + .afm_config = rkisp1_afm_config_v10,
> };
>
> static int rkisp1_params_enum_fmt_meta_out(struct file *file, void *priv,
> @@ -1472,7 +1472,7 @@ static void rkisp1_init_params(struct rkisp1_params *params)
> params->vdev_fmt.fmt.meta.buffersize =
> sizeof(struct rkisp1_params_cfg);
>
> - params->ops = &rkisp1_params_ops;
> + params->ops = &rkisp1_v10_params_ops;
> }
>
> int rkisp1_params_register(struct rkisp1_device *rkisp1)
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> index fa33080f51db..c71ccd148bde 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> @@ -212,6 +212,35 @@
>
> /* CCL */
> #define RKISP1_CIF_CCL_CIF_CLK_DIS BIT(2)
> +/* VI_ISP_CLK_CTRL */
> +#define RKISP1_CIF_CLK_CTRL_ISP_RAW BIT(0)
> +#define RKISP1_CIF_CLK_CTRL_ISP_RGB BIT(1)
> +#define RKISP1_CIF_CLK_CTRL_ISP_YUV BIT(2)
> +#define RKISP1_CIF_CLK_CTRL_ISP_3A BIT(3)
> +#define RKISP1_CIF_CLK_CTRL_MIPI_RAW BIT(4)
> +#define RKISP1_CIF_CLK_CTRL_ISP_IE BIT(5)
> +#define RKISP1_CIF_CLK_CTRL_RSZ_RAM BIT(6)
> +#define RKISP1_CIF_CLK_CTRL_JPEG_RAM BIT(7)
> +#define RKISP1_CIF_CLK_CTRL_ACLK_ISP BIT(8)
> +#define RKISP1_CIF_CLK_CTRL_MI_IDC BIT(9)
> +#define RKISP1_CIF_CLK_CTRL_MI_MP BIT(10)
> +#define RKISP1_CIF_CLK_CTRL_MI_JPEG BIT(11)
> +#define RKISP1_CIF_CLK_CTRL_MI_DP BIT(12)
> +#define RKISP1_CIF_CLK_CTRL_MI_Y12 BIT(13)
> +#define RKISP1_CIF_CLK_CTRL_MI_SP BIT(14)
> +#define RKISP1_CIF_CLK_CTRL_MI_RAW0 BIT(15)
> +#define RKISP1_CIF_CLK_CTRL_MI_RAW1 BIT(16)
> +#define RKISP1_CIF_CLK_CTRL_MI_READ BIT(17)
> +#define RKISP1_CIF_CLK_CTRL_MI_RAWRD BIT(18)
> +#define RKISP1_CIF_CLK_CTRL_CP BIT(19)
> +#define RKISP1_CIF_CLK_CTRL_IE BIT(20)
> +#define RKISP1_CIF_CLK_CTRL_SI BIT(21)
> +#define RKISP1_CIF_CLK_CTRL_RSZM BIT(22)
> +#define RKISP1_CIF_CLK_CTRL_DPMUX BIT(23)
> +#define RKISP1_CIF_CLK_CTRL_JPEG BIT(24)
> +#define RKISP1_CIF_CLK_CTRL_RSZS BIT(25)
> +#define RKISP1_CIF_CLK_CTRL_MIPI BIT(26)
> +#define RKISP1_CIF_CLK_CTRL_MARVINMI BIT(27)
What are those new registers? I guess they don't belong to this patch.
Thanks,
Dafna
> /* ICCL */
> #define RKISP1_CIF_ICCL_ISP_CLK BIT(0)
> #define RKISP1_CIF_ICCL_CP_CLK BIT(1)
> @@ -346,26 +375,26 @@
> #define RKISP1_CIF_SUPER_IMP_CTRL_TRANSP_DIS BIT(2)
>
> /* ISP HISTOGRAM CALCULATION : ISP_HIST_PROP */
> -#define RKISP1_CIF_ISP_HIST_PROP_MODE_DIS (0 << 0)
> -#define RKISP1_CIF_ISP_HIST_PROP_MODE_RGB BIT(0)
> -#define RKISP1_CIF_ISP_HIST_PROP_MODE_RED (2 << 0)
> -#define RKISP1_CIF_ISP_HIST_PROP_MODE_GREEN (3 << 0)
> -#define RKISP1_CIF_ISP_HIST_PROP_MODE_BLUE (4 << 0)
> -#define RKISP1_CIF_ISP_HIST_PROP_MODE_LUM (5 << 0)
> -#define RKISP1_CIF_ISP_HIST_PROP_MODE_MASK 0x7
> -#define RKISP1_CIF_ISP_HIST_PREDIV_SET(x) (((x) & 0x7F) << 3)
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_SET(v0, v1, v2, v3) \
> +#define RKISP1_CIF_ISP_HIST_PROP_MODE_DIS_V10 (0 << 0)
> +#define RKISP1_CIF_ISP_HIST_PROP_MODE_RGB_V10 BIT(0)
> +#define RKISP1_CIF_ISP_HIST_PROP_MODE_RED_V10 (2 << 0)
> +#define RKISP1_CIF_ISP_HIST_PROP_MODE_GREEN_V10 (3 << 0)
> +#define RKISP1_CIF_ISP_HIST_PROP_MODE_BLUE_V10 (4 << 0)
> +#define RKISP1_CIF_ISP_HIST_PROP_MODE_LUM_V10 (5 << 0)
> +#define RKISP1_CIF_ISP_HIST_PROP_MODE_MASK_V10 0x7
> +#define RKISP1_CIF_ISP_HIST_PREDIV_SET_V10(x) (((x) & 0x7F) << 3)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_SET_V10(v0, v1, v2, v3) \
> (((v0) & 0x1F) | (((v1) & 0x1F) << 8) |\
> (((v2) & 0x1F) << 16) | \
> (((v3) & 0x1F) << 24))
>
> -#define RKISP1_CIF_ISP_HIST_WINDOW_OFFSET_RESERVED 0xFFFFF000
> -#define RKISP1_CIF_ISP_HIST_WINDOW_SIZE_RESERVED 0xFFFFF800
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_RESERVED 0xE0E0E0E0
> -#define RKISP1_CIF_ISP_MAX_HIST_PREDIVIDER 0x0000007F
> -#define RKISP1_CIF_ISP_HIST_ROW_NUM 5
> -#define RKISP1_CIF_ISP_HIST_COLUMN_NUM 5
> -#define RKISP1_CIF_ISP_HIST_GET_BIN(x) ((x) & 0x000FFFFF)
> +#define RKISP1_CIF_ISP_HIST_WINDOW_OFFSET_RESERVED_V10 0xFFFFF000
> +#define RKISP1_CIF_ISP_HIST_WINDOW_SIZE_RESERVED_V10 0xFFFFF800
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_RESERVED_V10 0xE0E0E0E0
> +#define RKISP1_CIF_ISP_MAX_HIST_PREDIVIDER_V10 0x0000007F
> +#define RKISP1_CIF_ISP_HIST_ROW_NUM_V10 5
> +#define RKISP1_CIF_ISP_HIST_COLUMN_NUM_V10 5
> +#define RKISP1_CIF_ISP_HIST_GET_BIN_V10(x) ((x) & 0x000FFFFF)
>
> /* AUTO FOCUS MEASUREMENT: ISP_AFM_CTRL */
> #define RKISP1_ISP_AFM_CTRL_ENABLE BIT(0)
> @@ -442,41 +471,41 @@
> #define RKISP1_CIF_ISP_EXP_CTRL_MEASMODE_1 BIT(31)
>
> /* ISP_EXP_H_SIZE */
> -#define RKISP1_CIF_ISP_EXP_H_SIZE_SET(x) ((x) & 0x7FF)
> -#define RKISP1_CIF_ISP_EXP_HEIGHT_MASK 0x000007FF
> +#define RKISP1_CIF_ISP_EXP_H_SIZE_SET_V10(x) ((x) & 0x7FF)
> +#define RKISP1_CIF_ISP_EXP_HEIGHT_MASK_V10 0x000007FF
> /* ISP_EXP_V_SIZE : vertical size must be a multiple of 2). */
> -#define RKISP1_CIF_ISP_EXP_V_SIZE_SET(x) ((x) & 0x7FE)
> +#define RKISP1_CIF_ISP_EXP_V_SIZE_SET_V10(x) ((x) & 0x7FE)
>
> /* ISP_EXP_H_OFFSET */
> -#define RKISP1_CIF_ISP_EXP_H_OFFSET_SET(x) ((x) & 0x1FFF)
> -#define RKISP1_CIF_ISP_EXP_MAX_HOFFS 2424
> +#define RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V10(x) ((x) & 0x1FFF)
> +#define RKISP1_CIF_ISP_EXP_MAX_HOFFS_V10 2424
> /* ISP_EXP_V_OFFSET */
> -#define RKISP1_CIF_ISP_EXP_V_OFFSET_SET(x) ((x) & 0x1FFF)
> -#define RKISP1_CIF_ISP_EXP_MAX_VOFFS 1806
> -
> -#define RKISP1_CIF_ISP_EXP_ROW_NUM 5
> -#define RKISP1_CIF_ISP_EXP_COLUMN_NUM 5
> -#define RKISP1_CIF_ISP_EXP_NUM_LUMA_REGS \
> - (RKISP1_CIF_ISP_EXP_ROW_NUM * RKISP1_CIF_ISP_EXP_COLUMN_NUM)
> -#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE 516
> -#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE 35
> -#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE 390
> -#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE 28
> -#define RKISP1_CIF_ISP_EXP_MAX_HSIZE \
> - (RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE * RKISP1_CIF_ISP_EXP_COLUMN_NUM + 1)
> -#define RKISP1_CIF_ISP_EXP_MIN_HSIZE \
> - (RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE * RKISP1_CIF_ISP_EXP_COLUMN_NUM + 1)
> -#define RKISP1_CIF_ISP_EXP_MAX_VSIZE \
> - (RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE * RKISP1_CIF_ISP_EXP_ROW_NUM + 1)
> -#define RKISP1_CIF_ISP_EXP_MIN_VSIZE \
> - (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE * RKISP1_CIF_ISP_EXP_ROW_NUM + 1)
> +#define RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V10(x) ((x) & 0x1FFF)
> +#define RKISP1_CIF_ISP_EXP_MAX_VOFFS_V10 1806
> +
> +#define RKISP1_CIF_ISP_EXP_ROW_NUM_V10 5
> +#define RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 5
> +#define RKISP1_CIF_ISP_EXP_NUM_LUMA_REGS_V10 \
> + (RKISP1_CIF_ISP_EXP_ROW_NUM_V10 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10)
> +#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V10 516
> +#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V10 35
> +#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V10 390
> +#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V10 28
> +#define RKISP1_CIF_ISP_EXP_MAX_HSIZE_V10 \
> + (RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V10 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 + 1)
> +#define RKISP1_CIF_ISP_EXP_MIN_HSIZE_V10 \
> + (RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V10 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 + 1)
> +#define RKISP1_CIF_ISP_EXP_MAX_VSIZE_V10 \
> + (RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V10 * RKISP1_CIF_ISP_EXP_ROW_NUM_V10 + 1)
> +#define RKISP1_CIF_ISP_EXP_MIN_VSIZE_V10 \
> + (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V10 * RKISP1_CIF_ISP_EXP_ROW_NUM_V10 + 1)
>
> /* LSC: ISP_LSC_CTRL */
> #define RKISP1_CIF_ISP_LSC_CTRL_ENA BIT(0)
> #define RKISP1_CIF_ISP_LSC_SECT_SIZE_RESERVED 0xFC00FC00
> -#define RKISP1_CIF_ISP_LSC_GRAD_RESERVED 0xF000F000
> -#define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED 0xF000F000
> -#define RKISP1_CIF_ISP_LSC_TABLE_DATA(v0, v1) \
> +#define RKISP1_CIF_ISP_LSC_GRAD_RESERVED_V10 0xF000F000
> +#define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED_V10 0xF000F000
> +#define RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(v0, v1) \
> (((v0) & 0xFFF) | (((v1) & 0xFFF) << 12))
> #define RKISP1_CIF_ISP_LSC_SECT_SIZE(v0, v1) \
> (((v0) & 0xFFF) | (((v1) & 0xFFF) << 16))
> @@ -667,18 +696,18 @@
> #define RKISP1_CIF_ISP_GAMMA_B_Y14 (RKISP1_CIF_ISP_BASE + 0x000000E4)
> #define RKISP1_CIF_ISP_GAMMA_B_Y15 (RKISP1_CIF_ISP_BASE + 0x000000E8)
> #define RKISP1_CIF_ISP_GAMMA_B_Y16 (RKISP1_CIF_ISP_BASE + 0x000000EC)
> -#define RKISP1_CIF_ISP_AWB_PROP (RKISP1_CIF_ISP_BASE + 0x00000110)
> -#define RKISP1_CIF_ISP_AWB_WND_H_OFFS (RKISP1_CIF_ISP_BASE + 0x00000114)
> -#define RKISP1_CIF_ISP_AWB_WND_V_OFFS (RKISP1_CIF_ISP_BASE + 0x00000118)
> -#define RKISP1_CIF_ISP_AWB_WND_H_SIZE (RKISP1_CIF_ISP_BASE + 0x0000011C)
> -#define RKISP1_CIF_ISP_AWB_WND_V_SIZE (RKISP1_CIF_ISP_BASE + 0x00000120)
> -#define RKISP1_CIF_ISP_AWB_FRAMES (RKISP1_CIF_ISP_BASE + 0x00000124)
> -#define RKISP1_CIF_ISP_AWB_REF (RKISP1_CIF_ISP_BASE + 0x00000128)
> -#define RKISP1_CIF_ISP_AWB_THRESH (RKISP1_CIF_ISP_BASE + 0x0000012C)
> -#define RKISP1_CIF_ISP_AWB_GAIN_G (RKISP1_CIF_ISP_BASE + 0x00000138)
> -#define RKISP1_CIF_ISP_AWB_GAIN_RB (RKISP1_CIF_ISP_BASE + 0x0000013C)
> -#define RKISP1_CIF_ISP_AWB_WHITE_CNT (RKISP1_CIF_ISP_BASE + 0x00000140)
> -#define RKISP1_CIF_ISP_AWB_MEAN (RKISP1_CIF_ISP_BASE + 0x00000144)
> +#define RKISP1_CIF_ISP_AWB_PROP_V10 (RKISP1_CIF_ISP_BASE + 0x00000110)
> +#define RKISP1_CIF_ISP_AWB_WND_H_OFFS_V10 (RKISP1_CIF_ISP_BASE + 0x00000114)
> +#define RKISP1_CIF_ISP_AWB_WND_V_OFFS_V10 (RKISP1_CIF_ISP_BASE + 0x00000118)
> +#define RKISP1_CIF_ISP_AWB_WND_H_SIZE_V10 (RKISP1_CIF_ISP_BASE + 0x0000011C)
> +#define RKISP1_CIF_ISP_AWB_WND_V_SIZE_V10 (RKISP1_CIF_ISP_BASE + 0x00000120)
> +#define RKISP1_CIF_ISP_AWB_FRAMES_V10 (RKISP1_CIF_ISP_BASE + 0x00000124)
> +#define RKISP1_CIF_ISP_AWB_REF_V10 (RKISP1_CIF_ISP_BASE + 0x00000128)
> +#define RKISP1_CIF_ISP_AWB_THRESH_V10 (RKISP1_CIF_ISP_BASE + 0x0000012C)
> +#define RKISP1_CIF_ISP_AWB_GAIN_G_V10 (RKISP1_CIF_ISP_BASE + 0x00000138)
> +#define RKISP1_CIF_ISP_AWB_GAIN_RB_V10 (RKISP1_CIF_ISP_BASE + 0x0000013C)
> +#define RKISP1_CIF_ISP_AWB_WHITE_CNT_V10 (RKISP1_CIF_ISP_BASE + 0x00000140)
> +#define RKISP1_CIF_ISP_AWB_MEAN_V10 (RKISP1_CIF_ISP_BASE + 0x00000144)
> #define RKISP1_CIF_ISP_CC_COEFF_0 (RKISP1_CIF_ISP_BASE + 0x00000170)
> #define RKISP1_CIF_ISP_CC_COEFF_1 (RKISP1_CIF_ISP_BASE + 0x00000174)
> #define RKISP1_CIF_ISP_CC_COEFF_2 (RKISP1_CIF_ISP_BASE + 0x00000178)
> @@ -712,24 +741,24 @@
> #define RKISP1_CIF_ISP_CT_COEFF_6 (RKISP1_CIF_ISP_BASE + 0x000001E8)
> #define RKISP1_CIF_ISP_CT_COEFF_7 (RKISP1_CIF_ISP_BASE + 0x000001EC)
> #define RKISP1_CIF_ISP_CT_COEFF_8 (RKISP1_CIF_ISP_BASE + 0x000001F0)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_MODE (RKISP1_CIF_ISP_BASE + 0x000001F4)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_0 (RKISP1_CIF_ISP_BASE + 0x000001F8)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_1 (RKISP1_CIF_ISP_BASE + 0x000001FC)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_2 (RKISP1_CIF_ISP_BASE + 0x00000200)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_3 (RKISP1_CIF_ISP_BASE + 0x00000204)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_4 (RKISP1_CIF_ISP_BASE + 0x00000208)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_5 (RKISP1_CIF_ISP_BASE + 0x0000020C)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_6 (RKISP1_CIF_ISP_BASE + 0x00000210)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_7 (RKISP1_CIF_ISP_BASE + 0x00000214)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_8 (RKISP1_CIF_ISP_BASE + 0x00000218)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_9 (RKISP1_CIF_ISP_BASE + 0x0000021C)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_10 (RKISP1_CIF_ISP_BASE + 0x00000220)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_11 (RKISP1_CIF_ISP_BASE + 0x00000224)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_12 (RKISP1_CIF_ISP_BASE + 0x00000228)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_13 (RKISP1_CIF_ISP_BASE + 0x0000022C)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_14 (RKISP1_CIF_ISP_BASE + 0x00000230)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_15 (RKISP1_CIF_ISP_BASE + 0x00000234)
> -#define RKISP1_CIF_ISP_GAMMA_OUT_Y_16 (RKISP1_CIF_ISP_BASE + 0x00000238)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_MODE_V10 (RKISP1_CIF_ISP_BASE + 0x000001F4)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V10 (RKISP1_CIF_ISP_BASE + 0x000001F8)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_1_V10 (RKISP1_CIF_ISP_BASE + 0x000001FC)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_2_V10 (RKISP1_CIF_ISP_BASE + 0x00000200)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_3_V10 (RKISP1_CIF_ISP_BASE + 0x00000204)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_4_V10 (RKISP1_CIF_ISP_BASE + 0x00000208)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_5_V10 (RKISP1_CIF_ISP_BASE + 0x0000020C)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_6_V10 (RKISP1_CIF_ISP_BASE + 0x00000210)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_7_V10 (RKISP1_CIF_ISP_BASE + 0x00000214)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_8_V10 (RKISP1_CIF_ISP_BASE + 0x00000218)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_9_V10 (RKISP1_CIF_ISP_BASE + 0x0000021C)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_10_V10 (RKISP1_CIF_ISP_BASE + 0x00000220)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_11_V10 (RKISP1_CIF_ISP_BASE + 0x00000224)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_12_V10 (RKISP1_CIF_ISP_BASE + 0x00000228)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_13_V10 (RKISP1_CIF_ISP_BASE + 0x0000022C)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_14_V10 (RKISP1_CIF_ISP_BASE + 0x00000230)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_15_V10 (RKISP1_CIF_ISP_BASE + 0x00000234)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_16_V10 (RKISP1_CIF_ISP_BASE + 0x00000238)
> #define RKISP1_CIF_ISP_ERR (RKISP1_CIF_ISP_BASE + 0x0000023C)
> #define RKISP1_CIF_ISP_ERR_CLR (RKISP1_CIF_ISP_BASE + 0x00000240)
> #define RKISP1_CIF_ISP_FRAME_COUNT (RKISP1_CIF_ISP_BASE + 0x00000244)
> @@ -1005,36 +1034,35 @@
> #define RKISP1_CIF_ISP_IS_H_SIZE_SHD (RKISP1_CIF_ISP_IS_BASE + 0x0000002C)
> #define RKISP1_CIF_ISP_IS_V_SIZE_SHD (RKISP1_CIF_ISP_IS_BASE + 0x00000030)
>
> -#define RKISP1_CIF_ISP_HIST_BASE 0x00002400
> -
> -#define RKISP1_CIF_ISP_HIST_PROP (RKISP1_CIF_ISP_HIST_BASE + 0x00000000)
> -#define RKISP1_CIF_ISP_HIST_H_OFFS (RKISP1_CIF_ISP_HIST_BASE + 0x00000004)
> -#define RKISP1_CIF_ISP_HIST_V_OFFS (RKISP1_CIF_ISP_HIST_BASE + 0x00000008)
> -#define RKISP1_CIF_ISP_HIST_H_SIZE (RKISP1_CIF_ISP_HIST_BASE + 0x0000000C)
> -#define RKISP1_CIF_ISP_HIST_V_SIZE (RKISP1_CIF_ISP_HIST_BASE + 0x00000010)
> -#define RKISP1_CIF_ISP_HIST_BIN_0 (RKISP1_CIF_ISP_HIST_BASE + 0x00000014)
> -#define RKISP1_CIF_ISP_HIST_BIN_1 (RKISP1_CIF_ISP_HIST_BASE + 0x00000018)
> -#define RKISP1_CIF_ISP_HIST_BIN_2 (RKISP1_CIF_ISP_HIST_BASE + 0x0000001C)
> -#define RKISP1_CIF_ISP_HIST_BIN_3 (RKISP1_CIF_ISP_HIST_BASE + 0x00000020)
> -#define RKISP1_CIF_ISP_HIST_BIN_4 (RKISP1_CIF_ISP_HIST_BASE + 0x00000024)
> -#define RKISP1_CIF_ISP_HIST_BIN_5 (RKISP1_CIF_ISP_HIST_BASE + 0x00000028)
> -#define RKISP1_CIF_ISP_HIST_BIN_6 (RKISP1_CIF_ISP_HIST_BASE + 0x0000002C)
> -#define RKISP1_CIF_ISP_HIST_BIN_7 (RKISP1_CIF_ISP_HIST_BASE + 0x00000030)
> -#define RKISP1_CIF_ISP_HIST_BIN_8 (RKISP1_CIF_ISP_HIST_BASE + 0x00000034)
> -#define RKISP1_CIF_ISP_HIST_BIN_9 (RKISP1_CIF_ISP_HIST_BASE + 0x00000038)
> -#define RKISP1_CIF_ISP_HIST_BIN_10 (RKISP1_CIF_ISP_HIST_BASE + 0x0000003C)
> -#define RKISP1_CIF_ISP_HIST_BIN_11 (RKISP1_CIF_ISP_HIST_BASE + 0x00000040)
> -#define RKISP1_CIF_ISP_HIST_BIN_12 (RKISP1_CIF_ISP_HIST_BASE + 0x00000044)
> -#define RKISP1_CIF_ISP_HIST_BIN_13 (RKISP1_CIF_ISP_HIST_BASE + 0x00000048)
> -#define RKISP1_CIF_ISP_HIST_BIN_14 (RKISP1_CIF_ISP_HIST_BASE + 0x0000004C)
> -#define RKISP1_CIF_ISP_HIST_BIN_15 (RKISP1_CIF_ISP_HIST_BASE + 0x00000050)
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_00TO30 (RKISP1_CIF_ISP_HIST_BASE + 0x00000054)
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_40TO21 (RKISP1_CIF_ISP_HIST_BASE + 0x00000058)
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_31TO12 (RKISP1_CIF_ISP_HIST_BASE + 0x0000005C)
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_22TO03 (RKISP1_CIF_ISP_HIST_BASE + 0x00000060)
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_13TO43 (RKISP1_CIF_ISP_HIST_BASE + 0x00000064)
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_04TO34 (RKISP1_CIF_ISP_HIST_BASE + 0x00000068)
> -#define RKISP1_CIF_ISP_HIST_WEIGHT_44 (RKISP1_CIF_ISP_HIST_BASE + 0x0000006C)
> +#define RKISP1_CIF_ISP_HIST_BASE_V10 0x00002400
> +#define RKISP1_CIF_ISP_HIST_PROP_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000000)
> +#define RKISP1_CIF_ISP_HIST_H_OFFS_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000004)
> +#define RKISP1_CIF_ISP_HIST_V_OFFS_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000008)
> +#define RKISP1_CIF_ISP_HIST_H_SIZE_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000000C)
> +#define RKISP1_CIF_ISP_HIST_V_SIZE_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000010)
> +#define RKISP1_CIF_ISP_HIST_BIN_0_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000014)
> +#define RKISP1_CIF_ISP_HIST_BIN_1_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000018)
> +#define RKISP1_CIF_ISP_HIST_BIN_2_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000001C)
> +#define RKISP1_CIF_ISP_HIST_BIN_3_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000020)
> +#define RKISP1_CIF_ISP_HIST_BIN_4_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000024)
> +#define RKISP1_CIF_ISP_HIST_BIN_5_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000028)
> +#define RKISP1_CIF_ISP_HIST_BIN_6_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000002C)
> +#define RKISP1_CIF_ISP_HIST_BIN_7_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000030)
> +#define RKISP1_CIF_ISP_HIST_BIN_8_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000034)
> +#define RKISP1_CIF_ISP_HIST_BIN_9_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000038)
> +#define RKISP1_CIF_ISP_HIST_BIN_10_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000003C)
> +#define RKISP1_CIF_ISP_HIST_BIN_11_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000040)
> +#define RKISP1_CIF_ISP_HIST_BIN_12_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000044)
> +#define RKISP1_CIF_ISP_HIST_BIN_13_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000048)
> +#define RKISP1_CIF_ISP_HIST_BIN_14_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000004C)
> +#define RKISP1_CIF_ISP_HIST_BIN_15_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000050)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_00TO30_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000054)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_40TO21_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000058)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_31TO12_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000005C)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_22TO03_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000060)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_13TO43_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000064)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_04TO34_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x00000068)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_44_V10 (RKISP1_CIF_ISP_HIST_BASE_V10 + 0x0000006C)
>
> #define RKISP1_CIF_ISP_FILT_BASE 0x00002500
> #define RKISP1_CIF_ISP_FILT_MODE (RKISP1_CIF_ISP_FILT_BASE + 0x00000000)
> @@ -1060,35 +1088,35 @@
>
> #define RKISP1_CIF_ISP_EXP_BASE 0x00002600
> #define RKISP1_CIF_ISP_EXP_CTRL (RKISP1_CIF_ISP_EXP_BASE + 0x00000000)
> -#define RKISP1_CIF_ISP_EXP_H_OFFSET (RKISP1_CIF_ISP_EXP_BASE + 0x00000004)
> -#define RKISP1_CIF_ISP_EXP_V_OFFSET (RKISP1_CIF_ISP_EXP_BASE + 0x00000008)
> -#define RKISP1_CIF_ISP_EXP_H_SIZE (RKISP1_CIF_ISP_EXP_BASE + 0x0000000C)
> -#define RKISP1_CIF_ISP_EXP_V_SIZE (RKISP1_CIF_ISP_EXP_BASE + 0x00000010)
> -#define RKISP1_CIF_ISP_EXP_MEAN_00 (RKISP1_CIF_ISP_EXP_BASE + 0x00000014)
> -#define RKISP1_CIF_ISP_EXP_MEAN_10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000018)
> -#define RKISP1_CIF_ISP_EXP_MEAN_20 (RKISP1_CIF_ISP_EXP_BASE + 0x0000001c)
> -#define RKISP1_CIF_ISP_EXP_MEAN_30 (RKISP1_CIF_ISP_EXP_BASE + 0x00000020)
> -#define RKISP1_CIF_ISP_EXP_MEAN_40 (RKISP1_CIF_ISP_EXP_BASE + 0x00000024)
> -#define RKISP1_CIF_ISP_EXP_MEAN_01 (RKISP1_CIF_ISP_EXP_BASE + 0x00000028)
> -#define RKISP1_CIF_ISP_EXP_MEAN_11 (RKISP1_CIF_ISP_EXP_BASE + 0x0000002c)
> -#define RKISP1_CIF_ISP_EXP_MEAN_21 (RKISP1_CIF_ISP_EXP_BASE + 0x00000030)
> -#define RKISP1_CIF_ISP_EXP_MEAN_31 (RKISP1_CIF_ISP_EXP_BASE + 0x00000034)
> -#define RKISP1_CIF_ISP_EXP_MEAN_41 (RKISP1_CIF_ISP_EXP_BASE + 0x00000038)
> -#define RKISP1_CIF_ISP_EXP_MEAN_02 (RKISP1_CIF_ISP_EXP_BASE + 0x0000003c)
> -#define RKISP1_CIF_ISP_EXP_MEAN_12 (RKISP1_CIF_ISP_EXP_BASE + 0x00000040)
> -#define RKISP1_CIF_ISP_EXP_MEAN_22 (RKISP1_CIF_ISP_EXP_BASE + 0x00000044)
> -#define RKISP1_CIF_ISP_EXP_MEAN_32 (RKISP1_CIF_ISP_EXP_BASE + 0x00000048)
> -#define RKISP1_CIF_ISP_EXP_MEAN_42 (RKISP1_CIF_ISP_EXP_BASE + 0x0000004c)
> -#define RKISP1_CIF_ISP_EXP_MEAN_03 (RKISP1_CIF_ISP_EXP_BASE + 0x00000050)
> -#define RKISP1_CIF_ISP_EXP_MEAN_13 (RKISP1_CIF_ISP_EXP_BASE + 0x00000054)
> -#define RKISP1_CIF_ISP_EXP_MEAN_23 (RKISP1_CIF_ISP_EXP_BASE + 0x00000058)
> -#define RKISP1_CIF_ISP_EXP_MEAN_33 (RKISP1_CIF_ISP_EXP_BASE + 0x0000005c)
> -#define RKISP1_CIF_ISP_EXP_MEAN_43 (RKISP1_CIF_ISP_EXP_BASE + 0x00000060)
> -#define RKISP1_CIF_ISP_EXP_MEAN_04 (RKISP1_CIF_ISP_EXP_BASE + 0x00000064)
> -#define RKISP1_CIF_ISP_EXP_MEAN_14 (RKISP1_CIF_ISP_EXP_BASE + 0x00000068)
> -#define RKISP1_CIF_ISP_EXP_MEAN_24 (RKISP1_CIF_ISP_EXP_BASE + 0x0000006c)
> -#define RKISP1_CIF_ISP_EXP_MEAN_34 (RKISP1_CIF_ISP_EXP_BASE + 0x00000070)
> -#define RKISP1_CIF_ISP_EXP_MEAN_44 (RKISP1_CIF_ISP_EXP_BASE + 0x00000074)
> +#define RKISP1_CIF_ISP_EXP_H_OFFSET_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000004)
> +#define RKISP1_CIF_ISP_EXP_V_OFFSET_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000008)
> +#define RKISP1_CIF_ISP_EXP_H_SIZE_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000000C)
> +#define RKISP1_CIF_ISP_EXP_V_SIZE_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000010)
> +#define RKISP1_CIF_ISP_EXP_MEAN_00_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000014)
> +#define RKISP1_CIF_ISP_EXP_MEAN_10_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000018)
> +#define RKISP1_CIF_ISP_EXP_MEAN_20_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000001c)
> +#define RKISP1_CIF_ISP_EXP_MEAN_30_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000020)
> +#define RKISP1_CIF_ISP_EXP_MEAN_40_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000024)
> +#define RKISP1_CIF_ISP_EXP_MEAN_01_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000028)
> +#define RKISP1_CIF_ISP_EXP_MEAN_11_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000002c)
> +#define RKISP1_CIF_ISP_EXP_MEAN_21_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000030)
> +#define RKISP1_CIF_ISP_EXP_MEAN_31_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000034)
> +#define RKISP1_CIF_ISP_EXP_MEAN_41_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000038)
> +#define RKISP1_CIF_ISP_EXP_MEAN_02_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000003c)
> +#define RKISP1_CIF_ISP_EXP_MEAN_12_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000040)
> +#define RKISP1_CIF_ISP_EXP_MEAN_22_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000044)
> +#define RKISP1_CIF_ISP_EXP_MEAN_32_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000048)
> +#define RKISP1_CIF_ISP_EXP_MEAN_42_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000004c)
> +#define RKISP1_CIF_ISP_EXP_MEAN_03_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000050)
> +#define RKISP1_CIF_ISP_EXP_MEAN_13_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000054)
> +#define RKISP1_CIF_ISP_EXP_MEAN_23_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000058)
> +#define RKISP1_CIF_ISP_EXP_MEAN_33_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000005c)
> +#define RKISP1_CIF_ISP_EXP_MEAN_43_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000060)
> +#define RKISP1_CIF_ISP_EXP_MEAN_04_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000064)
> +#define RKISP1_CIF_ISP_EXP_MEAN_14_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000068)
> +#define RKISP1_CIF_ISP_EXP_MEAN_24_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000006c)
> +#define RKISP1_CIF_ISP_EXP_MEAN_34_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000070)
> +#define RKISP1_CIF_ISP_EXP_MEAN_44_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000074)
>
> #define RKISP1_CIF_ISP_BLS_BASE 0x00002700
> #define RKISP1_CIF_ISP_BLS_CTRL (RKISP1_CIF_ISP_BLS_BASE + 0x00000000)
> @@ -1260,4 +1288,7 @@
> #define RKISP1_CIF_ISP_VSM_DELTA_H (RKISP1_CIF_ISP_VSM_BASE + 0x0000001C)
> #define RKISP1_CIF_ISP_VSM_DELTA_V (RKISP1_CIF_ISP_VSM_BASE + 0x00000020)
>
> +#define RKISP1_CIF_ISP_CSI0_BASE 0x00007000
> +#define RKISP1_CIF_ISP_CSI0_CTRL0 (RKISP1_CIF_ISP_CSI0_BASE + 0x00000000)
> +
> #endif /* _RKISP1_REGS_H */
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> index f68a5e78e54a..3f286c55ad60 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> @@ -175,18 +175,18 @@ rkisp1_stats_init_vb2_queue(struct vb2_queue *q, struct rkisp1_stats *stats)
> return vb2_queue_init(q);
> }
>
> -static void rkisp1_stats_get_awb_meas(struct rkisp1_stats *stats,
> - struct rkisp1_stat_buffer *pbuf)
> +static void rkisp1_stats_get_awb_meas_v10(struct rkisp1_stats *stats,
> + struct rkisp1_stat_buffer *pbuf)
> {
> /* Protect against concurrent access from ISR? */
> struct rkisp1_device *rkisp1 = stats->rkisp1;
> u32 reg_val;
>
> pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AWB;
> - reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_WHITE_CNT);
> + reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_WHITE_CNT_V10);
> pbuf->params.awb.awb_mean[0].cnt =
> RKISP1_CIF_ISP_AWB_GET_PIXEL_CNT(reg_val);
> - reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_MEAN);
> + reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_MEAN_V10);
>
> pbuf->params.awb.awb_mean[0].mean_cr_or_r =
> RKISP1_CIF_ISP_AWB_GET_MEAN_CR_R(reg_val);
> @@ -196,8 +196,8 @@ static void rkisp1_stats_get_awb_meas(struct rkisp1_stats *stats,
> RKISP1_CIF_ISP_AWB_GET_MEAN_Y_G(reg_val);
> }
>
> -static void rkisp1_stats_get_aec_meas(struct rkisp1_stats *stats,
> - struct rkisp1_stat_buffer *pbuf)
> +static void rkisp1_stats_get_aec_meas_v10(struct rkisp1_stats *stats,
> + struct rkisp1_stat_buffer *pbuf)
> {
> struct rkisp1_device *rkisp1 = stats->rkisp1;
> unsigned int i;
> @@ -206,7 +206,7 @@ static void rkisp1_stats_get_aec_meas(struct rkisp1_stats *stats,
> for (i = 0; i < RKISP1_CIF_ISP_AE_MEAN_MAX_V10; i++)
> pbuf->params.ae.exp_mean[i] =
> (u8)rkisp1_read(rkisp1,
> - RKISP1_CIF_ISP_EXP_MEAN_00 + i * 4);
> + RKISP1_CIF_ISP_EXP_MEAN_00_V10 + i * 4);
> }
>
> static void rkisp1_stats_get_afc_meas(struct rkisp1_stats *stats,
> @@ -226,17 +226,17 @@ static void rkisp1_stats_get_afc_meas(struct rkisp1_stats *stats,
> af->window[2].lum = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AFM_LUM_C);
> }
>
> -static void rkisp1_stats_get_hst_meas(struct rkisp1_stats *stats,
> - struct rkisp1_stat_buffer *pbuf)
> +static void rkisp1_stats_get_hst_meas_v10(struct rkisp1_stats *stats,
> + struct rkisp1_stat_buffer *pbuf)
> {
> struct rkisp1_device *rkisp1 = stats->rkisp1;
> unsigned int i;
>
> pbuf->meas_type |= RKISP1_CIF_ISP_STAT_HIST;
> for (i = 0; i < RKISP1_CIF_ISP_HIST_BIN_N_MAX_V10; i++) {
> - u32 reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_HIST_BIN_0 + i * 4);
> + u32 reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_HIST_BIN_0_V10 + i * 4);
>
> - pbuf->params.hist.hist_bins[i] = RKISP1_CIF_ISP_HIST_GET_BIN(reg_val);
> + pbuf->params.hist.hist_bins[i] = RKISP1_CIF_ISP_HIST_GET_BIN_V10(reg_val);
> }
> }
>
> @@ -287,10 +287,10 @@ static void rkisp1_stats_get_bls_meas(struct rkisp1_stats *stats,
> }
> }
>
> -static struct rkisp1_stats_ops rkisp1_stats_ops = {
> - .get_awb_meas = rkisp1_stats_get_awb_meas,
> - .get_aec_meas = rkisp1_stats_get_aec_meas,
> - .get_hst_meas = rkisp1_stats_get_hst_meas,
> +static struct rkisp1_stats_ops rkisp1_v10_stats_ops = {
> + .get_awb_meas = rkisp1_stats_get_awb_meas_v10,
> + .get_aec_meas = rkisp1_stats_get_aec_meas_v10,
> + .get_hst_meas = rkisp1_stats_get_hst_meas_v10,
> };
>
> static void
> @@ -361,7 +361,7 @@ static void rkisp1_init_stats(struct rkisp1_stats *stats)
> stats->vdev_fmt.fmt.meta.buffersize =
> sizeof(struct rkisp1_stat_buffer);
>
> - stats->ops = &rkisp1_stats_ops;
> + stats->ops = &rkisp1_v10_stats_ops;
> }
>
> int rkisp1_stats_register(struct rkisp1_device *rkisp1)
>
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 7/7] media: rockchip: rkisp1: add support for px30 isp version
2021-06-15 0:37 ` Heiko Stuebner
@ 2021-06-15 6:31 ` Dafna Hirschfeld
-1 siblings, 0 replies; 38+ messages in thread
From: Dafna Hirschfeld @ 2021-06-15 6:31 UTC (permalink / raw)
To: Heiko Stuebner, mchehab, hverkuil-cisco
Cc: ezequiel, helen.koike, Laurent.pinchart, linux-rockchip,
linux-media, Heiko Stuebner
Hi,
On 15.06.21 03:37, Heiko Stuebner wrote:
> From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
>
> The px30 uses a V12 isp block so add compatible and matchdata
> for it.
>
> Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> ---
> .../media/platform/rockchip/rkisp1/rkisp1-dev.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> index ddc05189c62a..6e4c0710f3a3 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> @@ -398,6 +398,19 @@ static irqreturn_t rkisp1_isr(int irq, void *ctx)
> return IRQ_HANDLED;
> }
>
> +static const char * const px30_isp_clks[] = {
> + "isp",
> + "aclk",
> + "hclk",
> + "pclk",
> +};
> +
> +static const struct rkisp1_match_data px30_isp_match_data = {
> + .clks = px30_isp_clks,
> + .size = ARRAY_SIZE(px30_isp_clks),
> + .isp_ver = RKISP1_V12,
> +};
> +
> static const char * const rk3399_isp_clks[] = {
> "isp",
> "aclk",
> @@ -411,6 +424,10 @@ static const struct rkisp1_match_data rk3399_isp_match_data = {
> };
>
> static const struct of_device_id rkisp1_of_match[] = {
> + {
> + .compatible = "rockchip,px30-cif-isp",
> + .data = &px30_isp_match_data,
> + },
I think the yaml should be updated to add the compatible "rockchip,px30-cif-isp"
also, maybe interrupt-names values should be added to the 'rkisp1_match_data' of each compatible
and then in patch 1 those values can be used instead of the if-else implementation in the probe.
Thanks,
Dafna
> {
> .compatible = "rockchip,rk3399-cif-isp",
> .data = &rk3399_isp_match_data,
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 7/7] media: rockchip: rkisp1: add support for px30 isp version
@ 2021-06-15 6:31 ` Dafna Hirschfeld
0 siblings, 0 replies; 38+ messages in thread
From: Dafna Hirschfeld @ 2021-06-15 6:31 UTC (permalink / raw)
To: Heiko Stuebner, mchehab, hverkuil-cisco
Cc: ezequiel, helen.koike, Laurent.pinchart, linux-rockchip,
linux-media, Heiko Stuebner
Hi,
On 15.06.21 03:37, Heiko Stuebner wrote:
> From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
>
> The px30 uses a V12 isp block so add compatible and matchdata
> for it.
>
> Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> ---
> .../media/platform/rockchip/rkisp1/rkisp1-dev.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> index ddc05189c62a..6e4c0710f3a3 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> @@ -398,6 +398,19 @@ static irqreturn_t rkisp1_isr(int irq, void *ctx)
> return IRQ_HANDLED;
> }
>
> +static const char * const px30_isp_clks[] = {
> + "isp",
> + "aclk",
> + "hclk",
> + "pclk",
> +};
> +
> +static const struct rkisp1_match_data px30_isp_match_data = {
> + .clks = px30_isp_clks,
> + .size = ARRAY_SIZE(px30_isp_clks),
> + .isp_ver = RKISP1_V12,
> +};
> +
> static const char * const rk3399_isp_clks[] = {
> "isp",
> "aclk",
> @@ -411,6 +424,10 @@ static const struct rkisp1_match_data rk3399_isp_match_data = {
> };
>
> static const struct of_device_id rkisp1_of_match[] = {
> + {
> + .compatible = "rockchip,px30-cif-isp",
> + .data = &px30_isp_match_data,
> + },
I think the yaml should be updated to add the compatible "rockchip,px30-cif-isp"
also, maybe interrupt-names values should be added to the 'rkisp1_match_data' of each compatible
and then in patch 1 those values can be used instead of the if-else implementation in the probe.
Thanks,
Dafna
> {
> .compatible = "rockchip,rk3399-cif-isp",
> .data = &rk3399_isp_match_data,
>
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 6/7] media: rockchip: rkisp1: add support for v12 isp variants
2021-06-15 0:37 ` Heiko Stuebner
@ 2021-06-15 6:33 ` Dafna Hirschfeld
-1 siblings, 0 replies; 38+ messages in thread
From: Dafna Hirschfeld @ 2021-06-15 6:33 UTC (permalink / raw)
To: Heiko Stuebner, mchehab, hverkuil-cisco
Cc: ezequiel, helen.koike, Laurent.pinchart, linux-rockchip,
linux-media, Heiko Stuebner
Hi,
On 15.06.21 03:37, Heiko Stuebner wrote:
> From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
>
> The rkisp1 evolved over soc generations and the rk3326/px30 introduced
> the so called v12 - probably meaning v1.2.
>
> Add the new register definitions.
>
> Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> ---
> .../platform/rockchip/rkisp1/rkisp1-isp.c | 13 +
> .../platform/rockchip/rkisp1/rkisp1-params.c | 338 +++++++++++++++++-
> .../platform/rockchip/rkisp1/rkisp1-regs.h | 111 ++++++
> .../platform/rockchip/rkisp1/rkisp1-stats.c | 73 +++-
> 4 files changed, 533 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> index 1de98e688008..36829e3bdda0 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> @@ -408,6 +408,10 @@ static int rkisp1_config_mipi(struct rkisp1_device *rkisp1)
>
> rkisp1_write(rkisp1, mipi_ctrl, RKISP1_CIF_MIPI_CTRL);
>
> + /* V12 could also use a newer csi2-host, but we don't want that yet */
> + if (rkisp1->media_dev.hw_revision == RKISP1_V12)
> + rkisp1_write(rkisp1, 0, RKISP1_CIF_ISP_CSI0_CTRL0);
> +
> /* Configure Data Type and Virtual Channel */
> rkisp1_write(rkisp1,
> RKISP1_CIF_MIPI_DATA_SEL_DT(sink_fmt->mipi_dt) |
> @@ -527,6 +531,15 @@ static void rkisp1_config_clk(struct rkisp1_device *rkisp1)
> RKISP1_CIF_ICCL_DCROP_CLK;
>
> rkisp1_write(rkisp1, val, RKISP1_CIF_ICCL);
> +
> + /* ensure sp and mp can run at the same time in V12 */
> + if (rkisp1->media_dev.hw_revision == RKISP1_V12) {
> + val = RKISP1_CIF_CLK_CTRL_MI_Y12 | RKISP1_CIF_CLK_CTRL_MI_SP |
> + RKISP1_CIF_CLK_CTRL_MI_RAW0 | RKISP1_CIF_CLK_CTRL_MI_RAW1 |
> + RKISP1_CIF_CLK_CTRL_MI_READ | RKISP1_CIF_CLK_CTRL_MI_RAWRD |
> + RKISP1_CIF_CLK_CTRL_CP | RKISP1_CIF_CLK_CTRL_IE;
> + rkisp1_write(rkisp1, val, RKISP1_CIF_VI_ISP_CLK_CTRL_V12);
> + }
> }
>
> static void rkisp1_isp_start(struct rkisp1_device *rkisp1)
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> index 427c7cc400b2..0d2b77dd11f5 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
I wonder if we should add two new files 'rkisp1-params-v10.c' 'rkisp1-params-v12.c'
and move all the callback implementations to those files so not to overload 'rkisp1-params.c'
Thanks,
Dafna
> @@ -255,6 +255,78 @@ rkisp1_lsc_matrix_config_v10(struct rkisp1_params *params,
> RKISP1_CIF_ISP_LSC_TABLE_SEL);
> }
>
> +static void
> +rkisp1_lsc_matrix_config_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_lsc_config *pconfig)
> +{
> + unsigned int isp_lsc_status, sram_addr, isp_lsc_table_sel, i, j, data;
> +
> + isp_lsc_status = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_LSC_STATUS);
> +
> + /* RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_153 = ( 17 * 18 ) >> 1 */
> + sram_addr = (isp_lsc_status & RKISP1_CIF_ISP_LSC_ACTIVE_TABLE) ?
> + RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_0 :
> + RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_153;
> + rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_R_TABLE_ADDR);
> + rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_GR_TABLE_ADDR);
> + rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_GB_TABLE_ADDR);
> + rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_B_TABLE_ADDR);
> +
> + /* program data tables (table size is 9 * 17 = 153) */
> + for (i = 0; i < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; i++) {
> + /*
> + * 17 sectors with 2 values in one DWORD = 9
> + * DWORDs (2nd value of last DWORD unused)
> + */
> + for (j = 0; j < RKISP1_CIF_ISP_LSC_SAMPLES_MAX - 1; j += 2) {
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
> + pconfig->r_data_tbl[i][j],
> + pconfig->r_data_tbl[i][j + 1]);
> + rkisp1_write(params->rkisp1, data,
> + RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
> +
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
> + pconfig->gr_data_tbl[i][j],
> + pconfig->gr_data_tbl[i][j + 1]);
> + rkisp1_write(params->rkisp1, data,
> + RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
> +
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
> + pconfig->gb_data_tbl[i][j],
> + pconfig->gb_data_tbl[i][j + 1]);
> + rkisp1_write(params->rkisp1, data,
> + RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
> +
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
> + pconfig->b_data_tbl[i][j],
> + pconfig->b_data_tbl[i][j + 1]);
> + rkisp1_write(params->rkisp1, data,
> + RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
> + }
> +
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->r_data_tbl[i][j], 0);
> + rkisp1_write(params->rkisp1, data,
> + RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
> +
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->gr_data_tbl[i][j], 0);
> + rkisp1_write(params->rkisp1, data,
> + RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
> +
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->gb_data_tbl[i][j], 0);
> + rkisp1_write(params->rkisp1, data,
> + RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
> +
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->b_data_tbl[i][j], 0);
> + rkisp1_write(params->rkisp1, data,
> + RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
> + }
> + isp_lsc_table_sel = (isp_lsc_status & RKISP1_CIF_ISP_LSC_ACTIVE_TABLE) ?
> + RKISP1_CIF_ISP_LSC_TABLE_0 :
> + RKISP1_CIF_ISP_LSC_TABLE_1;
> + rkisp1_write(params->rkisp1, isp_lsc_table_sel,
> + RKISP1_CIF_ISP_LSC_TABLE_SEL);
> +}
> +
> static void rkisp1_lsc_config(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_lsc_config *arg)
> {
> @@ -396,6 +468,25 @@ static void rkisp1_goc_config_v10(struct rkisp1_params *params,
> RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V10 + i * 4);
> }
>
> +static void rkisp1_goc_config_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_goc_config *arg)
> +{
> + unsigned int i;
> + u32 value;
> +
> + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
> + RKISP1_CIF_ISP_CTRL_ISP_GAMMA_OUT_ENA);
> + rkisp1_write(params->rkisp1, arg->mode, RKISP1_CIF_ISP_GAMMA_OUT_MODE_V12);
> +
> + for (i = 0; i < RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V12 / 2; i++) {
> + value = RKISP1_CIF_ISP_GAMMA_VALUE_V12(
> + arg->gamma_y[2 * i + 1],
> + arg->gamma_y[2 * i]);
> + rkisp1_write(params->rkisp1, value,
> + RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V12 + i * 4);
> + }
> +}
> +
> /* ISP Cross Talk */
> static void rkisp1_ctk_config(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_ctk_config *arg)
> @@ -473,6 +564,45 @@ static void rkisp1_awb_meas_config_v10(struct rkisp1_params *params,
> arg->frames, RKISP1_CIF_ISP_AWB_FRAMES_V10);
> }
>
> +static void rkisp1_awb_meas_config_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_meas_config *arg)
> +{
> + u32 reg_val = 0;
> + /* based on the mode,configure the awb module */
> + if (arg->awb_mode == RKISP1_CIF_ISP_AWB_MODE_YCBCR) {
> + /* Reference Cb and Cr */
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_AWB_REF_CR_SET(arg->awb_ref_cr) |
> + arg->awb_ref_cb, RKISP1_CIF_ISP_AWB_REF_V12);
> + /* Yc Threshold */
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_AWB_MAX_Y_SET(arg->max_y) |
> + RKISP1_CIF_ISP_AWB_MIN_Y_SET(arg->min_y) |
> + RKISP1_CIF_ISP_AWB_MAX_CS_SET(arg->max_csum) |
> + arg->min_c, RKISP1_CIF_ISP_AWB_THRESH_V12);
> + }
> +
> + reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V12);
> + if (arg->enable_ymax_cmp)
> + reg_val |= RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
> + else
> + reg_val &= ~RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
> + reg_val &= ~RKISP1_CIF_ISP_AWB_SET_FRAMES_MASK_V12;
> + reg_val |= RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(arg->frames);
> + rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
> +
> + /* window offset */
> + rkisp1_write(params->rkisp1,
> + arg->awb_wnd.v_offs << 16 |
> + arg->awb_wnd.h_offs,
> + RKISP1_CIF_ISP_AWB_OFFS_V12);
> + /* AWB window size */
> + rkisp1_write(params->rkisp1,
> + arg->awb_wnd.v_size << 16 |
> + arg->awb_wnd.h_size,
> + RKISP1_CIF_ISP_AWB_SIZE_V12);
> +}
> +
> static void
> rkisp1_awb_meas_enable_v10(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_awb_meas_config *arg,
> @@ -502,6 +632,35 @@ rkisp1_awb_meas_enable_v10(struct rkisp1_params *params,
> }
> }
>
> +static void
> +rkisp1_awb_meas_enable_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_meas_config *arg,
> + bool en)
> +{
> + u32 reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V12);
> +
> + /* switch off */
> + reg_val &= RKISP1_CIF_ISP_AWB_MODE_MASK_NONE;
> +
> + if (en) {
> + if (arg->awb_mode == RKISP1_CIF_ISP_AWB_MODE_RGB)
> + reg_val |= RKISP1_CIF_ISP_AWB_MODE_RGB_EN;
> + else
> + reg_val |= RKISP1_CIF_ISP_AWB_MODE_YCBCR_EN;
> +
> + rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
> +
> + /* Measurements require AWB block be active. */
> + rkisp1_param_set_bits(params, RKISP1_CIF_ISP_CTRL,
> + RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
> + } else {
> + rkisp1_write(params->rkisp1,
> + reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
> + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
> + RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
> + }
> +}
> +
> static void
> rkisp1_awb_gain_config_v10(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_awb_gain_config *arg)
> @@ -515,6 +674,19 @@ rkisp1_awb_gain_config_v10(struct rkisp1_params *params,
> arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB_V10);
> }
>
> +static void
> +rkisp1_awb_gain_config_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_gain_config *arg)
> +{
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_green_r) |
> + arg->gain_green_b, RKISP1_CIF_ISP_AWB_GAIN_G_V12);
> +
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_red) |
> + arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB_V12);
> +}
> +
> static void rkisp1_aec_config_v10(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_aec_config *arg)
> {
> @@ -548,6 +720,38 @@ static void rkisp1_aec_config_v10(struct rkisp1_params *params,
> RKISP1_CIF_ISP_EXP_V_SIZE_V10);
> }
>
> +static void rkisp1_aec_config_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_aec_config *arg)
> +{
> + u32 exp_ctrl;
> + u32 block_hsize, block_vsize;
> + u32 wnd_num_idx = 1;
> + const u32 ae_wnd_num[] = { 5, 9, 15, 15 };
> +
> + /* avoid to override the old enable value */
> + exp_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_EXP_CTRL);
> + exp_ctrl &= RKISP1_CIF_ISP_EXP_ENA;
> + if (arg->autostop)
> + exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_AUTOSTOP;
> + if (arg->mode == RKISP1_CIF_ISP_EXP_MEASURING_MODE_1)
> + exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_MEASMODE_1;
> + exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_WNDNUM_SET_V12(wnd_num_idx);
> + rkisp1_write(params->rkisp1, exp_ctrl, RKISP1_CIF_ISP_EXP_CTRL);
> +
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V12(arg->meas_window.v_offs) |
> + RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V12(arg->meas_window.h_offs),
> + RKISP1_CIF_ISP_EXP_OFFS_V12);
> +
> + block_hsize = arg->meas_window.h_size / ae_wnd_num[wnd_num_idx] - 1;
> + block_vsize = arg->meas_window.v_size / ae_wnd_num[wnd_num_idx] - 1;
> +
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_EXP_V_SIZE_SET_V12(block_vsize) |
> + RKISP1_CIF_ISP_EXP_H_SIZE_SET_V12(block_hsize),
> + RKISP1_CIF_ISP_EXP_SIZE_V12);
> +}
> +
> static void rkisp1_cproc_config(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_cproc_config *arg)
> {
> @@ -625,6 +829,64 @@ static void rkisp1_hst_config_v10(struct rkisp1_params *params,
> rkisp1_write(params->rkisp1, weight[0] & 0x1F, RKISP1_CIF_ISP_HIST_WEIGHT_44_V10);
> }
>
> +static void rkisp1_hst_config_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_hst_config *arg)
> +{
> + unsigned int i, j;
> + u32 block_hsize, block_vsize;
> + u32 wnd_num_idx, hist_weight_num, hist_ctrl, value;
> + u8 weight15x15[RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12];
> + const u32 hist_wnd_num[] = { 5, 9, 15, 15 };
> +
> + /* now we just support 9x9 window */
> + wnd_num_idx = 1;
> + memset(weight15x15, 0x00, sizeof(weight15x15));
> + /* avoid to override the old enable value */
> + hist_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_HIST_CTRL_V12);
> + hist_ctrl &= RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 |
> + RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12;
> + hist_ctrl = hist_ctrl |
> + RKISP1_CIF_ISP_HIST_CTRL_INTRSEL_SET_V12(1) |
> + RKISP1_CIF_ISP_HIST_CTRL_DATASEL_SET_V12(0) |
> + RKISP1_CIF_ISP_HIST_CTRL_WATERLINE_SET_V12(0) |
> + RKISP1_CIF_ISP_HIST_CTRL_AUTOSTOP_SET_V12(0) |
> + RKISP1_CIF_ISP_HIST_CTRL_WNDNUM_SET_V12(1) |
> + RKISP1_CIF_ISP_HIST_CTRL_STEPSIZE_SET_V12(arg->histogram_predivider);
> + rkisp1_write(params->rkisp1, hist_ctrl, RKISP1_CIF_ISP_HIST_CTRL_V12);
> +
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_HIST_OFFS_SET_V12(arg->meas_window.h_offs,
> + arg->meas_window.v_offs),
> + RKISP1_CIF_ISP_HIST_OFFS_V12);
> +
> + block_hsize = arg->meas_window.h_size / hist_wnd_num[wnd_num_idx] - 1;
> + block_vsize = arg->meas_window.v_size / hist_wnd_num[wnd_num_idx] - 1;
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_HIST_SIZE_SET_V12(block_hsize, block_vsize),
> + RKISP1_CIF_ISP_HIST_SIZE_V12);
> +
> + for (i = 0; i < hist_wnd_num[wnd_num_idx]; i++) {
> + for (j = 0; j < hist_wnd_num[wnd_num_idx]; j++) {
> + weight15x15[i * RKISP1_CIF_ISP_HIST_ROW_NUM_V12 + j] =
> + arg->hist_weight[i * hist_wnd_num[wnd_num_idx] + j];
> + }
> + }
> +
> + hist_weight_num = RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12;
> + for (i = 0; i < (hist_weight_num / 4); i++) {
> + value = RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(
> + weight15x15[4 * i + 0],
> + weight15x15[4 * i + 1],
> + weight15x15[4 * i + 2],
> + weight15x15[4 * i + 3]);
> + rkisp1_write(params->rkisp1, value,
> + RKISP1_CIF_ISP_HIST_WEIGHT_V12 + 4 * i);
> + }
> + value = RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(weight15x15[4 * i + 0], 0, 0, 0);
> + rkisp1_write(params->rkisp1, value,
> + RKISP1_CIF_ISP_HIST_WEIGHT_V12 + 4 * i);
> +}
> +
> static void
> rkisp1_hst_enable_v10(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_hst_config *arg, bool en)
> @@ -643,6 +905,26 @@ rkisp1_hst_enable_v10(struct rkisp1_params *params,
> }
> }
>
> +static void
> +rkisp1_hst_enable_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_hst_config *arg, bool en)
> +{
> + if (en) {
> + u32 hist_ctrl = rkisp1_read(params->rkisp1,
> + RKISP1_CIF_ISP_HIST_CTRL_V12);
> +
> + hist_ctrl &= ~RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12;
> + hist_ctrl |= RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(arg->mode);
> + hist_ctrl |= RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(1);
> + rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_CTRL_V12,
> + hist_ctrl);
> + } else {
> + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_HIST_CTRL_V12,
> + RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 |
> + RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12);
> + }
> +}
> +
> static void rkisp1_afm_config_v10(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_afc_config *arg)
> {
> @@ -674,6 +956,45 @@ static void rkisp1_afm_config_v10(struct rkisp1_params *params,
> rkisp1_write(params->rkisp1, afm_ctrl, RKISP1_CIF_ISP_AFM_CTRL);
> }
>
> +static void rkisp1_afm_config_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_afc_config *arg)
> +{
> + size_t num_of_win = min_t(size_t, ARRAY_SIZE(arg->afm_win),
> + arg->num_afm_win);
> + u32 afm_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AFM_CTRL);
> + u32 lum_var_shift, afm_var_shift;
> + unsigned int i;
> +
> + /* Switch off to configure. */
> + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
> + RKISP1_CIF_ISP_AFM_ENA);
> +
> + for (i = 0; i < num_of_win; i++) {
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_AFM_WINDOW_X(arg->afm_win[i].h_offs) |
> + RKISP1_CIF_ISP_AFM_WINDOW_Y(arg->afm_win[i].v_offs),
> + RKISP1_CIF_ISP_AFM_LT_A + i * 8);
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_AFM_WINDOW_X(arg->afm_win[i].h_size +
> + arg->afm_win[i].h_offs) |
> + RKISP1_CIF_ISP_AFM_WINDOW_Y(arg->afm_win[i].v_size +
> + arg->afm_win[i].v_offs),
> + RKISP1_CIF_ISP_AFM_RB_A + i * 8);
> + }
> + rkisp1_write(params->rkisp1, arg->thres, RKISP1_CIF_ISP_AFM_THRES);
> +
> + lum_var_shift = RKISP1_CIF_ISP_AFM_GET_LUM_SHIFT_a_V12(arg->var_shift);
> + afm_var_shift = RKISP1_CIF_ISP_AFM_GET_AFM_SHIFT_a_V12(arg->var_shift);
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_AFM_SET_SHIFT_a_V12(lum_var_shift, afm_var_shift) |
> + RKISP1_CIF_ISP_AFM_SET_SHIFT_b_V12(lum_var_shift, afm_var_shift) |
> + RKISP1_CIF_ISP_AFM_SET_SHIFT_c_V12(lum_var_shift, afm_var_shift),
> + RKISP1_CIF_ISP_AFM_VAR_SHIFT);
> +
> + /* restore afm status */
> + rkisp1_write(params->rkisp1, afm_ctrl, RKISP1_CIF_ISP_AFM_CTRL);
> +}
> +
> static void rkisp1_ie_config(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_ie_config *arg)
> {
> @@ -1305,6 +1626,18 @@ static struct rkisp1_params_ops rkisp1_v10_params_ops = {
> .afm_config = rkisp1_afm_config_v10,
> };
>
> +static struct rkisp1_params_ops rkisp1_v12_params_ops = {
> + .lsc_matrix_config = rkisp1_lsc_matrix_config_v12,
> + .goc_config = rkisp1_goc_config_v12,
> + .awb_meas_config = rkisp1_awb_meas_config_v12,
> + .awb_meas_enable = rkisp1_awb_meas_enable_v12,
> + .awb_gain_config = rkisp1_awb_gain_config_v12,
> + .aec_config = rkisp1_aec_config_v12,
> + .hst_config = rkisp1_hst_config_v12,
> + .hst_enable = rkisp1_hst_enable_v12,
> + .afm_config = rkisp1_afm_config_v12,
> +};
> +
> static int rkisp1_params_enum_fmt_meta_out(struct file *file, void *priv,
> struct v4l2_fmtdesc *f)
> {
> @@ -1472,7 +1805,10 @@ static void rkisp1_init_params(struct rkisp1_params *params)
> params->vdev_fmt.fmt.meta.buffersize =
> sizeof(struct rkisp1_params_cfg);
>
> - params->ops = &rkisp1_v10_params_ops;
> + if (params->rkisp1->media_dev.hw_revision == RKISP1_V12)
> + params->ops = &rkisp1_v12_params_ops;
> + else
> + params->ops = &rkisp1_v10_params_ops;
> }
>
> int rkisp1_params_register(struct rkisp1_device *rkisp1)
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> index c71ccd148bde..d326214c7e07 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> @@ -396,6 +396,38 @@
> #define RKISP1_CIF_ISP_HIST_COLUMN_NUM_V10 5
> #define RKISP1_CIF_ISP_HIST_GET_BIN_V10(x) ((x) & 0x000FFFFF)
>
> +/* ISP HISTOGRAM CALCULATION : CIF_ISP_HIST */
> +#define RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(x) (((x) & 0x01) << 0)
> +#define RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12 RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(0x01)
> +#define RKISP1_CIF_ISP_HIST_CTRL_STEPSIZE_SET_V12(x) (((x) & 0x7F) << 1)
> +#define RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(x) (((x) & 0x07) << 8)
> +#define RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(0x07)
> +#define RKISP1_CIF_ISP_HIST_CTRL_AUTOSTOP_SET_V12(x) (((x) & 0x01) << 11)
> +#define RKISP1_CIF_ISP_HIST_CTRL_WATERLINE_SET_V12(x) (((x) & 0xFFF) << 12)
> +#define RKISP1_CIF_ISP_HIST_CTRL_DATASEL_SET_V12(x) (((x) & 0x07) << 24)
> +#define RKISP1_CIF_ISP_HIST_CTRL_INTRSEL_SET_V12(x) (((x) & 0x01) << 27)
> +#define RKISP1_CIF_ISP_HIST_CTRL_WNDNUM_SET_V12(x) (((x) & 0x03) << 28)
> +#define RKISP1_CIF_ISP_HIST_CTRL_DBGEN_SET_V12(x) (((x) & 0x01) << 30)
> +#define RKISP1_CIF_ISP_HIST_ROW_NUM_V12 15
> +#define RKISP1_CIF_ISP_HIST_COLUMN_NUM_V12 15
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12 \
> + (RKISP1_CIF_ISP_HIST_ROW_NUM_V12 * RKISP1_CIF_ISP_HIST_COLUMN_NUM_V12)
> +
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(v0, v1, v2, v3) \
> + (((v0) & 0x3F) | (((v1) & 0x3F) << 8) |\
> + (((v2) & 0x3F) << 16) |\
> + (((v3) & 0x3F) << 24))
> +
> +#define RKISP1_CIF_ISP_HIST_OFFS_SET_V12(v0, v1) \
> + (((v0) & 0x1FFF) | (((v1) & 0x1FFF) << 16))
> +#define RKISP1_CIF_ISP_HIST_SIZE_SET_V12(v0, v1) \
> + (((v0) & 0x7FF) | (((v1) & 0x7FF) << 16))
> +
> +#define RKISP1_CIF_ISP_HIST_GET_BIN0_V12(x) \
> + ((x) & 0xFFFF)
> +#define RKISP1_CIF_ISP_HIST_GET_BIN1_V12(x) \
> + (((x) >> 16) & 0xFFFF)
> +
> /* AUTO FOCUS MEASUREMENT: ISP_AFM_CTRL */
> #define RKISP1_ISP_AFM_CTRL_ENABLE BIT(0)
>
> @@ -430,6 +462,8 @@
> #define RKISP1_CIF_ISP_AWB_MODE_YCBCR_EN ((0 << 31) | (0x2 << 0))
> #define RKISP1_CIF_ISP_AWB_MODE_MASK_NONE 0xFFFFFFFC
> #define RKISP1_CIF_ISP_AWB_MODE_READ(x) ((x) & 3)
> +#define RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(x) (((x) & 0x07) << 28)
> +#define RKISP1_CIF_ISP_AWB_SET_FRAMES_MASK_V12 RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(0x07)
> /* ISP_AWB_GAIN_RB, ISP_AWB_GAIN_G */
> #define RKISP1_CIF_ISP_AWB_GAIN_R_SET(x) (((x) & 0x3FF) << 16)
> #define RKISP1_CIF_ISP_AWB_GAIN_R_READ(x) (((x) >> 16) & 0x3FF)
> @@ -464,6 +498,7 @@
> /* ISP_EXP_CTRL */
> #define RKISP1_CIF_ISP_EXP_ENA BIT(0)
> #define RKISP1_CIF_ISP_EXP_CTRL_AUTOSTOP BIT(1)
> +#define RKISP1_CIF_ISP_EXP_CTRL_WNDNUM_SET_V12(x) (((x) & 0x03) << 2)
> /*
> *'1' luminance calculation according to Y=(R+G+B) x 0.332 (85/256)
> *'0' luminance calculation according to Y=16+0.25R+0.5G+0.1094B
> @@ -473,15 +508,22 @@
> /* ISP_EXP_H_SIZE */
> #define RKISP1_CIF_ISP_EXP_H_SIZE_SET_V10(x) ((x) & 0x7FF)
> #define RKISP1_CIF_ISP_EXP_HEIGHT_MASK_V10 0x000007FF
> +#define RKISP1_CIF_ISP_EXP_H_SIZE_SET_V12(x) ((x) & 0x7FF)
> +#define RKISP1_CIF_ISP_EXP_HEIGHT_MASK_V12 0x000007FF
> /* ISP_EXP_V_SIZE : vertical size must be a multiple of 2). */
> #define RKISP1_CIF_ISP_EXP_V_SIZE_SET_V10(x) ((x) & 0x7FE)
> +#define RKISP1_CIF_ISP_EXP_V_SIZE_SET_V12(x) (((x) & 0x7FE) << 16)
>
> /* ISP_EXP_H_OFFSET */
> #define RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V10(x) ((x) & 0x1FFF)
> #define RKISP1_CIF_ISP_EXP_MAX_HOFFS_V10 2424
> +#define RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V12(x) ((x) & 0x1FFF)
> +#define RKISP1_CIF_ISP_EXP_MAX_HOFFS_V12 0x1FFF
> /* ISP_EXP_V_OFFSET */
> #define RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V10(x) ((x) & 0x1FFF)
> #define RKISP1_CIF_ISP_EXP_MAX_VOFFS_V10 1806
> +#define RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V12(x) (((x) & 0x1FFF) << 16)
> +#define RKISP1_CIF_ISP_EXP_MAX_VOFFS_V12 0x1FFF
>
> #define RKISP1_CIF_ISP_EXP_ROW_NUM_V10 5
> #define RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 5
> @@ -500,13 +542,40 @@
> #define RKISP1_CIF_ISP_EXP_MIN_VSIZE_V10 \
> (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V10 * RKISP1_CIF_ISP_EXP_ROW_NUM_V10 + 1)
>
> +#define RKISP1_CIF_ISP_EXP_ROW_NUM_V12 15
> +#define RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 15
> +#define RKISP1_CIF_ISP_EXP_NUM_LUMA_REGS_V12 \
> + (RKISP1_CIF_ISP_EXP_ROW_NUM_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12)
> +
> +#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V12 0x7FF
> +#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V12 0xE
> +#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V12 0x7FE
> +#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V12 0xE
> +#define RKISP1_CIF_ISP_EXP_MAX_HSIZE_V12 \
> + (RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 + 1)
> +#define RKISP1_CIF_ISP_EXP_MIN_HSIZE_V12 \
> + (RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 + 1)
> +#define RKISP1_CIF_ISP_EXP_MAX_VSIZE_V12 \
> + (RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V12 * RKISP1_CIF_ISP_EXP_ROW_NUM_V12 + 1)
> +#define RKISP1_CIF_ISP_EXP_MIN_VSIZE_V12 \
> + (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V12 * RKISP1_CIF_ISP_EXP_ROW_NUM_V12 + 1)
> +
> +#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(x) ((x) & 0xFF)
> +#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy1_V12(x) (((x) >> 8) & 0xFF)
> +#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy2_V12(x) (((x) >> 16) & 0xFF)
> +#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy3_V12(x) (((x) >> 24) & 0xFF)
> +
> /* LSC: ISP_LSC_CTRL */
> #define RKISP1_CIF_ISP_LSC_CTRL_ENA BIT(0)
> #define RKISP1_CIF_ISP_LSC_SECT_SIZE_RESERVED 0xFC00FC00
> #define RKISP1_CIF_ISP_LSC_GRAD_RESERVED_V10 0xF000F000
> #define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED_V10 0xF000F000
> +#define RKISP1_CIF_ISP_LSC_GRAD_RESERVED_V12 0xE000E000
> +#define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED_V12 0xE000E000
> #define RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(v0, v1) \
> (((v0) & 0xFFF) | (((v1) & 0xFFF) << 12))
> +#define RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(v0, v1) \
> + (((v0) & 0x1FFF) | (((v1) & 0x1FFF) << 13))
> #define RKISP1_CIF_ISP_LSC_SECT_SIZE(v0, v1) \
> (((v0) & 0xFFF) | (((v1) & 0xFFF) << 16))
> #define RKISP1_CIF_ISP_LSC_GRAD_SIZE(v0, v1) \
> @@ -579,6 +648,10 @@
> (1 << 15) | (1 << 11) | (1 << 7) | (1 << 3))
> #define RKISP1_CIFISP_DEGAMMA_Y_RESERVED 0xFFFFF000
>
> +/* GAMMA-OUT */
> +#define RKISP1_CIF_ISP_GAMMA_VALUE_V12(x, y) \
> + (((x) & 0xFFF) << 16 | ((y) & 0xFFF) << 0)
> +
> /* AFM */
> #define RKISP1_CIF_ISP_AFM_ENA BIT(0)
> #define RKISP1_CIF_ISP_AFM_THRES_RESERVED 0xFFFF0000
> @@ -589,6 +662,11 @@
> #define RKISP1_CIF_ISP_AFM_WINDOW_Y_MIN 0x2
> #define RKISP1_CIF_ISP_AFM_WINDOW_X(x) (((x) & 0x1FFF) << 16)
> #define RKISP1_CIF_ISP_AFM_WINDOW_Y(x) ((x) & 0x1FFF)
> +#define RKISP1_CIF_ISP_AFM_SET_SHIFT_a_V12(x, y) (((x) & 0x7) << 16 | ((y) & 0x7) << 0)
> +#define RKISP1_CIF_ISP_AFM_SET_SHIFT_b_V12(x, y) (((x) & 0x7) << 20 | ((y) & 0x7) << 4)
> +#define RKISP1_CIF_ISP_AFM_SET_SHIFT_c_V12(x, y) (((x) & 0x7) << 24 | ((y) & 0x7) << 8)
> +#define RKISP1_CIF_ISP_AFM_GET_LUM_SHIFT_a_V12(x) (((x) & 0x70000) >> 16)
> +#define RKISP1_CIF_ISP_AFM_GET_AFM_SHIFT_a_V12(x) ((x) & 0x7)
>
> /* DPF */
> #define RKISP1_CIF_ISP_DPF_MODE_EN BIT(0)
> @@ -611,6 +689,7 @@
> #define RKISP1_CIF_CTRL_BASE 0x00000000
> #define RKISP1_CIF_CCL (RKISP1_CIF_CTRL_BASE + 0x00000000)
> #define RKISP1_CIF_VI_ID (RKISP1_CIF_CTRL_BASE + 0x00000008)
> +#define RKISP1_CIF_VI_ISP_CLK_CTRL_V12 (RKISP1_CIF_CTRL_BASE + 0x0000000C)
> #define RKISP1_CIF_ICCL (RKISP1_CIF_CTRL_BASE + 0x00000010)
> #define RKISP1_CIF_IRCL (RKISP1_CIF_CTRL_BASE + 0x00000014)
> #define RKISP1_CIF_VI_DPCL (RKISP1_CIF_CTRL_BASE + 0x00000018)
> @@ -708,6 +787,23 @@
> #define RKISP1_CIF_ISP_AWB_GAIN_RB_V10 (RKISP1_CIF_ISP_BASE + 0x0000013C)
> #define RKISP1_CIF_ISP_AWB_WHITE_CNT_V10 (RKISP1_CIF_ISP_BASE + 0x00000140)
> #define RKISP1_CIF_ISP_AWB_MEAN_V10 (RKISP1_CIF_ISP_BASE + 0x00000144)
> +#define RKISP1_CIF_ISP_AWB_PROP_V12 (RKISP1_CIF_ISP_BASE + 0x00000110)
> +#define RKISP1_CIF_ISP_AWB_SIZE_V12 (RKISP1_CIF_ISP_BASE + 0x00000114)
> +#define RKISP1_CIF_ISP_AWB_OFFS_V12 (RKISP1_CIF_ISP_BASE + 0x00000118)
> +#define RKISP1_CIF_ISP_AWB_REF_V12 (RKISP1_CIF_ISP_BASE + 0x0000011C)
> +#define RKISP1_CIF_ISP_AWB_THRESH_V12 (RKISP1_CIF_ISP_BASE + 0x00000120)
> +#define RKISP1_CIF_ISP_X_COOR12_V12 (RKISP1_CIF_ISP_BASE + 0x00000124)
> +#define RKISP1_CIF_ISP_X_COOR34_V12 (RKISP1_CIF_ISP_BASE + 0x00000128)
> +#define RKISP1_CIF_ISP_AWB_WHITE_CNT_V12 (RKISP1_CIF_ISP_BASE + 0x0000012C)
> +#define RKISP1_CIF_ISP_AWB_MEAN_V12 (RKISP1_CIF_ISP_BASE + 0x00000130)
> +#define RKISP1_CIF_ISP_DEGAIN_V12 (RKISP1_CIF_ISP_BASE + 0x00000134)
> +#define RKISP1_CIF_ISP_AWB_GAIN_G_V12 (RKISP1_CIF_ISP_BASE + 0x00000138)
> +#define RKISP1_CIF_ISP_AWB_GAIN_RB_V12 (RKISP1_CIF_ISP_BASE + 0x0000013C)
> +#define RKISP1_CIF_ISP_REGION_LINE_V12 (RKISP1_CIF_ISP_BASE + 0x00000140)
> +#define RKISP1_CIF_ISP_WP_CNT_REGION0_V12 (RKISP1_CIF_ISP_BASE + 0x00000160)
> +#define RKISP1_CIF_ISP_WP_CNT_REGION1_V12 (RKISP1_CIF_ISP_BASE + 0x00000164)
> +#define RKISP1_CIF_ISP_WP_CNT_REGION2_V12 (RKISP1_CIF_ISP_BASE + 0x00000168)
> +#define RKISP1_CIF_ISP_WP_CNT_REGION3_V12 (RKISP1_CIF_ISP_BASE + 0x0000016C)
> #define RKISP1_CIF_ISP_CC_COEFF_0 (RKISP1_CIF_ISP_BASE + 0x00000170)
> #define RKISP1_CIF_ISP_CC_COEFF_1 (RKISP1_CIF_ISP_BASE + 0x00000174)
> #define RKISP1_CIF_ISP_CC_COEFF_2 (RKISP1_CIF_ISP_BASE + 0x00000178)
> @@ -765,6 +861,8 @@
> #define RKISP1_CIF_ISP_CT_OFFSET_R (RKISP1_CIF_ISP_BASE + 0x00000248)
> #define RKISP1_CIF_ISP_CT_OFFSET_G (RKISP1_CIF_ISP_BASE + 0x0000024C)
> #define RKISP1_CIF_ISP_CT_OFFSET_B (RKISP1_CIF_ISP_BASE + 0x00000250)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_MODE_V12 (RKISP1_CIF_ISP_BASE + 0x00000300)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V12 (RKISP1_CIF_ISP_BASE + 0x00000304)
>
> #define RKISP1_CIF_ISP_FLASH_BASE 0x00000660
> #define RKISP1_CIF_ISP_FLASH_CMD (RKISP1_CIF_ISP_FLASH_BASE + 0x00000000)
> @@ -1117,6 +1215,9 @@
> #define RKISP1_CIF_ISP_EXP_MEAN_24_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000006c)
> #define RKISP1_CIF_ISP_EXP_MEAN_34_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000070)
> #define RKISP1_CIF_ISP_EXP_MEAN_44_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000074)
> +#define RKISP1_CIF_ISP_EXP_SIZE_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x00000004)
> +#define RKISP1_CIF_ISP_EXP_OFFS_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x00000008)
> +#define RKISP1_CIF_ISP_EXP_MEAN_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x0000000c)
>
> #define RKISP1_CIF_ISP_BLS_BASE 0x00002700
> #define RKISP1_CIF_ISP_BLS_CTRL (RKISP1_CIF_ISP_BLS_BASE + 0x00000000)
> @@ -1277,6 +1378,16 @@
> #define RKISP1_CIF_ISP_WDR_TONECURVE_YM_31_SHD (RKISP1_CIF_ISP_WDR_BASE + 0x0000012C)
> #define RKISP1_CIF_ISP_WDR_TONECURVE_YM_32_SHD (RKISP1_CIF_ISP_WDR_BASE + 0x00000130)
>
> +#define RKISP1_CIF_ISP_HIST_BASE_V12 0x00002C00
> +#define RKISP1_CIF_ISP_HIST_CTRL_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000000)
> +#define RKISP1_CIF_ISP_HIST_SIZE_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000004)
> +#define RKISP1_CIF_ISP_HIST_OFFS_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000008)
> +#define RKISP1_CIF_ISP_HIST_DBG1_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000000C)
> +#define RKISP1_CIF_ISP_HIST_DBG2_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000001C)
> +#define RKISP1_CIF_ISP_HIST_DBG3_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000002C)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000003C)
> +#define RKISP1_CIF_ISP_HIST_BIN_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000120)
> +
> #define RKISP1_CIF_ISP_VSM_BASE 0x00002F00
> #define RKISP1_CIF_ISP_VSM_MODE (RKISP1_CIF_ISP_VSM_BASE + 0x00000000)
> #define RKISP1_CIF_ISP_VSM_H_OFFS (RKISP1_CIF_ISP_VSM_BASE + 0x00000004)
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> index 3f286c55ad60..dd99d7ea9ff6 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> @@ -196,6 +196,27 @@ static void rkisp1_stats_get_awb_meas_v10(struct rkisp1_stats *stats,
> RKISP1_CIF_ISP_AWB_GET_MEAN_Y_G(reg_val);
> }
>
> +static void rkisp1_stats_get_awb_meas_v12(struct rkisp1_stats *stats,
> + struct rkisp1_stat_buffer *pbuf)
> +{
> + /* Protect against concurrent access from ISR? */
> + struct rkisp1_device *rkisp1 = stats->rkisp1;
> + u32 reg_val;
> +
> + pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AWB;
> + reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_WHITE_CNT_V12);
> + pbuf->params.awb.awb_mean[0].cnt =
> + RKISP1_CIF_ISP_AWB_GET_PIXEL_CNT(reg_val);
> + reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_MEAN_V12);
> +
> + pbuf->params.awb.awb_mean[0].mean_cr_or_r =
> + RKISP1_CIF_ISP_AWB_GET_MEAN_CR_R(reg_val);
> + pbuf->params.awb.awb_mean[0].mean_cb_or_b =
> + RKISP1_CIF_ISP_AWB_GET_MEAN_CB_B(reg_val);
> + pbuf->params.awb.awb_mean[0].mean_y_or_g =
> + RKISP1_CIF_ISP_AWB_GET_MEAN_Y_G(reg_val);
> +}
> +
> static void rkisp1_stats_get_aec_meas_v10(struct rkisp1_stats *stats,
> struct rkisp1_stat_buffer *pbuf)
> {
> @@ -209,6 +230,30 @@ static void rkisp1_stats_get_aec_meas_v10(struct rkisp1_stats *stats,
> RKISP1_CIF_ISP_EXP_MEAN_00_V10 + i * 4);
> }
>
> +static void rkisp1_stats_get_aec_meas_v12(struct rkisp1_stats *stats,
> + struct rkisp1_stat_buffer *pbuf)
> +{
> + struct rkisp1_device *rkisp1 = stats->rkisp1;
> + u32 value;
> + int i;
> +
> + pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AUTOEXP;
> + for (i = 0; i < RKISP1_CIF_ISP_AE_MEAN_MAX_V12 / 4; i++) {
> + value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_EXP_MEAN_V12 + i * 4);
> + pbuf->params.ae.exp_mean[4 * i + 0] =
> + RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(value);
> + pbuf->params.ae.exp_mean[4 * i + 1] =
> + RKISP1_CIF_ISP_EXP_GET_MEAN_xy1_V12(value);
> + pbuf->params.ae.exp_mean[4 * i + 2] =
> + RKISP1_CIF_ISP_EXP_GET_MEAN_xy2_V12(value);
> + pbuf->params.ae.exp_mean[4 * i + 3] =
> + RKISP1_CIF_ISP_EXP_GET_MEAN_xy3_V12(value);
> + }
> +
> + value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_EXP_MEAN_V12 + i * 4);
> + pbuf->params.ae.exp_mean[4 * i + 0] = RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(value);
> +}
> +
> static void rkisp1_stats_get_afc_meas(struct rkisp1_stats *stats,
> struct rkisp1_stat_buffer *pbuf)
> {
> @@ -240,6 +285,23 @@ static void rkisp1_stats_get_hst_meas_v10(struct rkisp1_stats *stats,
> }
> }
>
> +static void rkisp1_stats_get_hst_meas_v12(struct rkisp1_stats *stats,
> + struct rkisp1_stat_buffer *pbuf)
> +{
> + struct rkisp1_device *rkisp1 = stats->rkisp1;
> + u32 value;
> + int i;
> +
> + pbuf->meas_type |= RKISP1_CIF_ISP_STAT_HIST;
> + for (i = 0; i < RKISP1_CIF_ISP_HIST_BIN_N_MAX_V12 / 2; i++) {
> + value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_HIST_BIN_V12 + i * 4);
> + pbuf->params.hist.hist_bins[2 * i] =
> + RKISP1_CIF_ISP_HIST_GET_BIN0_V12(value);
> + pbuf->params.hist.hist_bins[2 * i + 1] =
> + RKISP1_CIF_ISP_HIST_GET_BIN1_V12(value);
> + }
> +}
> +
> static void rkisp1_stats_get_bls_meas(struct rkisp1_stats *stats,
> struct rkisp1_stat_buffer *pbuf)
> {
> @@ -293,6 +355,12 @@ static struct rkisp1_stats_ops rkisp1_v10_stats_ops = {
> .get_hst_meas = rkisp1_stats_get_hst_meas_v10,
> };
>
> +static struct rkisp1_stats_ops rkisp1_v12_stats_ops = {
> + .get_awb_meas = rkisp1_stats_get_awb_meas_v12,
> + .get_aec_meas = rkisp1_stats_get_aec_meas_v12,
> + .get_hst_meas = rkisp1_stats_get_hst_meas_v12,
> +};
> +
> static void
> rkisp1_stats_send_measurement(struct rkisp1_stats *stats, u32 isp_ris)
> {
> @@ -361,7 +429,10 @@ static void rkisp1_init_stats(struct rkisp1_stats *stats)
> stats->vdev_fmt.fmt.meta.buffersize =
> sizeof(struct rkisp1_stat_buffer);
>
> - stats->ops = &rkisp1_v10_stats_ops;
> + if (stats->rkisp1->media_dev.hw_revision == RKISP1_V12)
> + stats->ops = &rkisp1_v12_stats_ops;
> + else
> + stats->ops = &rkisp1_v10_stats_ops;
> }
>
> int rkisp1_stats_register(struct rkisp1_device *rkisp1)
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 6/7] media: rockchip: rkisp1: add support for v12 isp variants
@ 2021-06-15 6:33 ` Dafna Hirschfeld
0 siblings, 0 replies; 38+ messages in thread
From: Dafna Hirschfeld @ 2021-06-15 6:33 UTC (permalink / raw)
To: Heiko Stuebner, mchehab, hverkuil-cisco
Cc: ezequiel, helen.koike, Laurent.pinchart, linux-rockchip,
linux-media, Heiko Stuebner
Hi,
On 15.06.21 03:37, Heiko Stuebner wrote:
> From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
>
> The rkisp1 evolved over soc generations and the rk3326/px30 introduced
> the so called v12 - probably meaning v1.2.
>
> Add the new register definitions.
>
> Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> ---
> .../platform/rockchip/rkisp1/rkisp1-isp.c | 13 +
> .../platform/rockchip/rkisp1/rkisp1-params.c | 338 +++++++++++++++++-
> .../platform/rockchip/rkisp1/rkisp1-regs.h | 111 ++++++
> .../platform/rockchip/rkisp1/rkisp1-stats.c | 73 +++-
> 4 files changed, 533 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> index 1de98e688008..36829e3bdda0 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> @@ -408,6 +408,10 @@ static int rkisp1_config_mipi(struct rkisp1_device *rkisp1)
>
> rkisp1_write(rkisp1, mipi_ctrl, RKISP1_CIF_MIPI_CTRL);
>
> + /* V12 could also use a newer csi2-host, but we don't want that yet */
> + if (rkisp1->media_dev.hw_revision == RKISP1_V12)
> + rkisp1_write(rkisp1, 0, RKISP1_CIF_ISP_CSI0_CTRL0);
> +
> /* Configure Data Type and Virtual Channel */
> rkisp1_write(rkisp1,
> RKISP1_CIF_MIPI_DATA_SEL_DT(sink_fmt->mipi_dt) |
> @@ -527,6 +531,15 @@ static void rkisp1_config_clk(struct rkisp1_device *rkisp1)
> RKISP1_CIF_ICCL_DCROP_CLK;
>
> rkisp1_write(rkisp1, val, RKISP1_CIF_ICCL);
> +
> + /* ensure sp and mp can run at the same time in V12 */
> + if (rkisp1->media_dev.hw_revision == RKISP1_V12) {
> + val = RKISP1_CIF_CLK_CTRL_MI_Y12 | RKISP1_CIF_CLK_CTRL_MI_SP |
> + RKISP1_CIF_CLK_CTRL_MI_RAW0 | RKISP1_CIF_CLK_CTRL_MI_RAW1 |
> + RKISP1_CIF_CLK_CTRL_MI_READ | RKISP1_CIF_CLK_CTRL_MI_RAWRD |
> + RKISP1_CIF_CLK_CTRL_CP | RKISP1_CIF_CLK_CTRL_IE;
> + rkisp1_write(rkisp1, val, RKISP1_CIF_VI_ISP_CLK_CTRL_V12);
> + }
> }
>
> static void rkisp1_isp_start(struct rkisp1_device *rkisp1)
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> index 427c7cc400b2..0d2b77dd11f5 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
I wonder if we should add two new files 'rkisp1-params-v10.c' 'rkisp1-params-v12.c'
and move all the callback implementations to those files so not to overload 'rkisp1-params.c'
Thanks,
Dafna
> @@ -255,6 +255,78 @@ rkisp1_lsc_matrix_config_v10(struct rkisp1_params *params,
> RKISP1_CIF_ISP_LSC_TABLE_SEL);
> }
>
> +static void
> +rkisp1_lsc_matrix_config_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_lsc_config *pconfig)
> +{
> + unsigned int isp_lsc_status, sram_addr, isp_lsc_table_sel, i, j, data;
> +
> + isp_lsc_status = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_LSC_STATUS);
> +
> + /* RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_153 = ( 17 * 18 ) >> 1 */
> + sram_addr = (isp_lsc_status & RKISP1_CIF_ISP_LSC_ACTIVE_TABLE) ?
> + RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_0 :
> + RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_153;
> + rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_R_TABLE_ADDR);
> + rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_GR_TABLE_ADDR);
> + rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_GB_TABLE_ADDR);
> + rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_B_TABLE_ADDR);
> +
> + /* program data tables (table size is 9 * 17 = 153) */
> + for (i = 0; i < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; i++) {
> + /*
> + * 17 sectors with 2 values in one DWORD = 9
> + * DWORDs (2nd value of last DWORD unused)
> + */
> + for (j = 0; j < RKISP1_CIF_ISP_LSC_SAMPLES_MAX - 1; j += 2) {
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
> + pconfig->r_data_tbl[i][j],
> + pconfig->r_data_tbl[i][j + 1]);
> + rkisp1_write(params->rkisp1, data,
> + RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
> +
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
> + pconfig->gr_data_tbl[i][j],
> + pconfig->gr_data_tbl[i][j + 1]);
> + rkisp1_write(params->rkisp1, data,
> + RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
> +
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
> + pconfig->gb_data_tbl[i][j],
> + pconfig->gb_data_tbl[i][j + 1]);
> + rkisp1_write(params->rkisp1, data,
> + RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
> +
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
> + pconfig->b_data_tbl[i][j],
> + pconfig->b_data_tbl[i][j + 1]);
> + rkisp1_write(params->rkisp1, data,
> + RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
> + }
> +
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->r_data_tbl[i][j], 0);
> + rkisp1_write(params->rkisp1, data,
> + RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
> +
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->gr_data_tbl[i][j], 0);
> + rkisp1_write(params->rkisp1, data,
> + RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
> +
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->gb_data_tbl[i][j], 0);
> + rkisp1_write(params->rkisp1, data,
> + RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
> +
> + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->b_data_tbl[i][j], 0);
> + rkisp1_write(params->rkisp1, data,
> + RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
> + }
> + isp_lsc_table_sel = (isp_lsc_status & RKISP1_CIF_ISP_LSC_ACTIVE_TABLE) ?
> + RKISP1_CIF_ISP_LSC_TABLE_0 :
> + RKISP1_CIF_ISP_LSC_TABLE_1;
> + rkisp1_write(params->rkisp1, isp_lsc_table_sel,
> + RKISP1_CIF_ISP_LSC_TABLE_SEL);
> +}
> +
> static void rkisp1_lsc_config(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_lsc_config *arg)
> {
> @@ -396,6 +468,25 @@ static void rkisp1_goc_config_v10(struct rkisp1_params *params,
> RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V10 + i * 4);
> }
>
> +static void rkisp1_goc_config_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_goc_config *arg)
> +{
> + unsigned int i;
> + u32 value;
> +
> + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
> + RKISP1_CIF_ISP_CTRL_ISP_GAMMA_OUT_ENA);
> + rkisp1_write(params->rkisp1, arg->mode, RKISP1_CIF_ISP_GAMMA_OUT_MODE_V12);
> +
> + for (i = 0; i < RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V12 / 2; i++) {
> + value = RKISP1_CIF_ISP_GAMMA_VALUE_V12(
> + arg->gamma_y[2 * i + 1],
> + arg->gamma_y[2 * i]);
> + rkisp1_write(params->rkisp1, value,
> + RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V12 + i * 4);
> + }
> +}
> +
> /* ISP Cross Talk */
> static void rkisp1_ctk_config(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_ctk_config *arg)
> @@ -473,6 +564,45 @@ static void rkisp1_awb_meas_config_v10(struct rkisp1_params *params,
> arg->frames, RKISP1_CIF_ISP_AWB_FRAMES_V10);
> }
>
> +static void rkisp1_awb_meas_config_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_meas_config *arg)
> +{
> + u32 reg_val = 0;
> + /* based on the mode,configure the awb module */
> + if (arg->awb_mode == RKISP1_CIF_ISP_AWB_MODE_YCBCR) {
> + /* Reference Cb and Cr */
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_AWB_REF_CR_SET(arg->awb_ref_cr) |
> + arg->awb_ref_cb, RKISP1_CIF_ISP_AWB_REF_V12);
> + /* Yc Threshold */
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_AWB_MAX_Y_SET(arg->max_y) |
> + RKISP1_CIF_ISP_AWB_MIN_Y_SET(arg->min_y) |
> + RKISP1_CIF_ISP_AWB_MAX_CS_SET(arg->max_csum) |
> + arg->min_c, RKISP1_CIF_ISP_AWB_THRESH_V12);
> + }
> +
> + reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V12);
> + if (arg->enable_ymax_cmp)
> + reg_val |= RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
> + else
> + reg_val &= ~RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
> + reg_val &= ~RKISP1_CIF_ISP_AWB_SET_FRAMES_MASK_V12;
> + reg_val |= RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(arg->frames);
> + rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
> +
> + /* window offset */
> + rkisp1_write(params->rkisp1,
> + arg->awb_wnd.v_offs << 16 |
> + arg->awb_wnd.h_offs,
> + RKISP1_CIF_ISP_AWB_OFFS_V12);
> + /* AWB window size */
> + rkisp1_write(params->rkisp1,
> + arg->awb_wnd.v_size << 16 |
> + arg->awb_wnd.h_size,
> + RKISP1_CIF_ISP_AWB_SIZE_V12);
> +}
> +
> static void
> rkisp1_awb_meas_enable_v10(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_awb_meas_config *arg,
> @@ -502,6 +632,35 @@ rkisp1_awb_meas_enable_v10(struct rkisp1_params *params,
> }
> }
>
> +static void
> +rkisp1_awb_meas_enable_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_meas_config *arg,
> + bool en)
> +{
> + u32 reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V12);
> +
> + /* switch off */
> + reg_val &= RKISP1_CIF_ISP_AWB_MODE_MASK_NONE;
> +
> + if (en) {
> + if (arg->awb_mode == RKISP1_CIF_ISP_AWB_MODE_RGB)
> + reg_val |= RKISP1_CIF_ISP_AWB_MODE_RGB_EN;
> + else
> + reg_val |= RKISP1_CIF_ISP_AWB_MODE_YCBCR_EN;
> +
> + rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
> +
> + /* Measurements require AWB block be active. */
> + rkisp1_param_set_bits(params, RKISP1_CIF_ISP_CTRL,
> + RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
> + } else {
> + rkisp1_write(params->rkisp1,
> + reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
> + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
> + RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
> + }
> +}
> +
> static void
> rkisp1_awb_gain_config_v10(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_awb_gain_config *arg)
> @@ -515,6 +674,19 @@ rkisp1_awb_gain_config_v10(struct rkisp1_params *params,
> arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB_V10);
> }
>
> +static void
> +rkisp1_awb_gain_config_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_awb_gain_config *arg)
> +{
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_green_r) |
> + arg->gain_green_b, RKISP1_CIF_ISP_AWB_GAIN_G_V12);
> +
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_red) |
> + arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB_V12);
> +}
> +
> static void rkisp1_aec_config_v10(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_aec_config *arg)
> {
> @@ -548,6 +720,38 @@ static void rkisp1_aec_config_v10(struct rkisp1_params *params,
> RKISP1_CIF_ISP_EXP_V_SIZE_V10);
> }
>
> +static void rkisp1_aec_config_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_aec_config *arg)
> +{
> + u32 exp_ctrl;
> + u32 block_hsize, block_vsize;
> + u32 wnd_num_idx = 1;
> + const u32 ae_wnd_num[] = { 5, 9, 15, 15 };
> +
> + /* avoid to override the old enable value */
> + exp_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_EXP_CTRL);
> + exp_ctrl &= RKISP1_CIF_ISP_EXP_ENA;
> + if (arg->autostop)
> + exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_AUTOSTOP;
> + if (arg->mode == RKISP1_CIF_ISP_EXP_MEASURING_MODE_1)
> + exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_MEASMODE_1;
> + exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_WNDNUM_SET_V12(wnd_num_idx);
> + rkisp1_write(params->rkisp1, exp_ctrl, RKISP1_CIF_ISP_EXP_CTRL);
> +
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V12(arg->meas_window.v_offs) |
> + RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V12(arg->meas_window.h_offs),
> + RKISP1_CIF_ISP_EXP_OFFS_V12);
> +
> + block_hsize = arg->meas_window.h_size / ae_wnd_num[wnd_num_idx] - 1;
> + block_vsize = arg->meas_window.v_size / ae_wnd_num[wnd_num_idx] - 1;
> +
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_EXP_V_SIZE_SET_V12(block_vsize) |
> + RKISP1_CIF_ISP_EXP_H_SIZE_SET_V12(block_hsize),
> + RKISP1_CIF_ISP_EXP_SIZE_V12);
> +}
> +
> static void rkisp1_cproc_config(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_cproc_config *arg)
> {
> @@ -625,6 +829,64 @@ static void rkisp1_hst_config_v10(struct rkisp1_params *params,
> rkisp1_write(params->rkisp1, weight[0] & 0x1F, RKISP1_CIF_ISP_HIST_WEIGHT_44_V10);
> }
>
> +static void rkisp1_hst_config_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_hst_config *arg)
> +{
> + unsigned int i, j;
> + u32 block_hsize, block_vsize;
> + u32 wnd_num_idx, hist_weight_num, hist_ctrl, value;
> + u8 weight15x15[RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12];
> + const u32 hist_wnd_num[] = { 5, 9, 15, 15 };
> +
> + /* now we just support 9x9 window */
> + wnd_num_idx = 1;
> + memset(weight15x15, 0x00, sizeof(weight15x15));
> + /* avoid to override the old enable value */
> + hist_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_HIST_CTRL_V12);
> + hist_ctrl &= RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 |
> + RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12;
> + hist_ctrl = hist_ctrl |
> + RKISP1_CIF_ISP_HIST_CTRL_INTRSEL_SET_V12(1) |
> + RKISP1_CIF_ISP_HIST_CTRL_DATASEL_SET_V12(0) |
> + RKISP1_CIF_ISP_HIST_CTRL_WATERLINE_SET_V12(0) |
> + RKISP1_CIF_ISP_HIST_CTRL_AUTOSTOP_SET_V12(0) |
> + RKISP1_CIF_ISP_HIST_CTRL_WNDNUM_SET_V12(1) |
> + RKISP1_CIF_ISP_HIST_CTRL_STEPSIZE_SET_V12(arg->histogram_predivider);
> + rkisp1_write(params->rkisp1, hist_ctrl, RKISP1_CIF_ISP_HIST_CTRL_V12);
> +
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_HIST_OFFS_SET_V12(arg->meas_window.h_offs,
> + arg->meas_window.v_offs),
> + RKISP1_CIF_ISP_HIST_OFFS_V12);
> +
> + block_hsize = arg->meas_window.h_size / hist_wnd_num[wnd_num_idx] - 1;
> + block_vsize = arg->meas_window.v_size / hist_wnd_num[wnd_num_idx] - 1;
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_HIST_SIZE_SET_V12(block_hsize, block_vsize),
> + RKISP1_CIF_ISP_HIST_SIZE_V12);
> +
> + for (i = 0; i < hist_wnd_num[wnd_num_idx]; i++) {
> + for (j = 0; j < hist_wnd_num[wnd_num_idx]; j++) {
> + weight15x15[i * RKISP1_CIF_ISP_HIST_ROW_NUM_V12 + j] =
> + arg->hist_weight[i * hist_wnd_num[wnd_num_idx] + j];
> + }
> + }
> +
> + hist_weight_num = RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12;
> + for (i = 0; i < (hist_weight_num / 4); i++) {
> + value = RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(
> + weight15x15[4 * i + 0],
> + weight15x15[4 * i + 1],
> + weight15x15[4 * i + 2],
> + weight15x15[4 * i + 3]);
> + rkisp1_write(params->rkisp1, value,
> + RKISP1_CIF_ISP_HIST_WEIGHT_V12 + 4 * i);
> + }
> + value = RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(weight15x15[4 * i + 0], 0, 0, 0);
> + rkisp1_write(params->rkisp1, value,
> + RKISP1_CIF_ISP_HIST_WEIGHT_V12 + 4 * i);
> +}
> +
> static void
> rkisp1_hst_enable_v10(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_hst_config *arg, bool en)
> @@ -643,6 +905,26 @@ rkisp1_hst_enable_v10(struct rkisp1_params *params,
> }
> }
>
> +static void
> +rkisp1_hst_enable_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_hst_config *arg, bool en)
> +{
> + if (en) {
> + u32 hist_ctrl = rkisp1_read(params->rkisp1,
> + RKISP1_CIF_ISP_HIST_CTRL_V12);
> +
> + hist_ctrl &= ~RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12;
> + hist_ctrl |= RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(arg->mode);
> + hist_ctrl |= RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(1);
> + rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_CTRL_V12,
> + hist_ctrl);
> + } else {
> + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_HIST_CTRL_V12,
> + RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 |
> + RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12);
> + }
> +}
> +
> static void rkisp1_afm_config_v10(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_afc_config *arg)
> {
> @@ -674,6 +956,45 @@ static void rkisp1_afm_config_v10(struct rkisp1_params *params,
> rkisp1_write(params->rkisp1, afm_ctrl, RKISP1_CIF_ISP_AFM_CTRL);
> }
>
> +static void rkisp1_afm_config_v12(struct rkisp1_params *params,
> + const struct rkisp1_cif_isp_afc_config *arg)
> +{
> + size_t num_of_win = min_t(size_t, ARRAY_SIZE(arg->afm_win),
> + arg->num_afm_win);
> + u32 afm_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AFM_CTRL);
> + u32 lum_var_shift, afm_var_shift;
> + unsigned int i;
> +
> + /* Switch off to configure. */
> + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
> + RKISP1_CIF_ISP_AFM_ENA);
> +
> + for (i = 0; i < num_of_win; i++) {
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_AFM_WINDOW_X(arg->afm_win[i].h_offs) |
> + RKISP1_CIF_ISP_AFM_WINDOW_Y(arg->afm_win[i].v_offs),
> + RKISP1_CIF_ISP_AFM_LT_A + i * 8);
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_AFM_WINDOW_X(arg->afm_win[i].h_size +
> + arg->afm_win[i].h_offs) |
> + RKISP1_CIF_ISP_AFM_WINDOW_Y(arg->afm_win[i].v_size +
> + arg->afm_win[i].v_offs),
> + RKISP1_CIF_ISP_AFM_RB_A + i * 8);
> + }
> + rkisp1_write(params->rkisp1, arg->thres, RKISP1_CIF_ISP_AFM_THRES);
> +
> + lum_var_shift = RKISP1_CIF_ISP_AFM_GET_LUM_SHIFT_a_V12(arg->var_shift);
> + afm_var_shift = RKISP1_CIF_ISP_AFM_GET_AFM_SHIFT_a_V12(arg->var_shift);
> + rkisp1_write(params->rkisp1,
> + RKISP1_CIF_ISP_AFM_SET_SHIFT_a_V12(lum_var_shift, afm_var_shift) |
> + RKISP1_CIF_ISP_AFM_SET_SHIFT_b_V12(lum_var_shift, afm_var_shift) |
> + RKISP1_CIF_ISP_AFM_SET_SHIFT_c_V12(lum_var_shift, afm_var_shift),
> + RKISP1_CIF_ISP_AFM_VAR_SHIFT);
> +
> + /* restore afm status */
> + rkisp1_write(params->rkisp1, afm_ctrl, RKISP1_CIF_ISP_AFM_CTRL);
> +}
> +
> static void rkisp1_ie_config(struct rkisp1_params *params,
> const struct rkisp1_cif_isp_ie_config *arg)
> {
> @@ -1305,6 +1626,18 @@ static struct rkisp1_params_ops rkisp1_v10_params_ops = {
> .afm_config = rkisp1_afm_config_v10,
> };
>
> +static struct rkisp1_params_ops rkisp1_v12_params_ops = {
> + .lsc_matrix_config = rkisp1_lsc_matrix_config_v12,
> + .goc_config = rkisp1_goc_config_v12,
> + .awb_meas_config = rkisp1_awb_meas_config_v12,
> + .awb_meas_enable = rkisp1_awb_meas_enable_v12,
> + .awb_gain_config = rkisp1_awb_gain_config_v12,
> + .aec_config = rkisp1_aec_config_v12,
> + .hst_config = rkisp1_hst_config_v12,
> + .hst_enable = rkisp1_hst_enable_v12,
> + .afm_config = rkisp1_afm_config_v12,
> +};
> +
> static int rkisp1_params_enum_fmt_meta_out(struct file *file, void *priv,
> struct v4l2_fmtdesc *f)
> {
> @@ -1472,7 +1805,10 @@ static void rkisp1_init_params(struct rkisp1_params *params)
> params->vdev_fmt.fmt.meta.buffersize =
> sizeof(struct rkisp1_params_cfg);
>
> - params->ops = &rkisp1_v10_params_ops;
> + if (params->rkisp1->media_dev.hw_revision == RKISP1_V12)
> + params->ops = &rkisp1_v12_params_ops;
> + else
> + params->ops = &rkisp1_v10_params_ops;
> }
>
> int rkisp1_params_register(struct rkisp1_device *rkisp1)
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> index c71ccd148bde..d326214c7e07 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> @@ -396,6 +396,38 @@
> #define RKISP1_CIF_ISP_HIST_COLUMN_NUM_V10 5
> #define RKISP1_CIF_ISP_HIST_GET_BIN_V10(x) ((x) & 0x000FFFFF)
>
> +/* ISP HISTOGRAM CALCULATION : CIF_ISP_HIST */
> +#define RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(x) (((x) & 0x01) << 0)
> +#define RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12 RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(0x01)
> +#define RKISP1_CIF_ISP_HIST_CTRL_STEPSIZE_SET_V12(x) (((x) & 0x7F) << 1)
> +#define RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(x) (((x) & 0x07) << 8)
> +#define RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(0x07)
> +#define RKISP1_CIF_ISP_HIST_CTRL_AUTOSTOP_SET_V12(x) (((x) & 0x01) << 11)
> +#define RKISP1_CIF_ISP_HIST_CTRL_WATERLINE_SET_V12(x) (((x) & 0xFFF) << 12)
> +#define RKISP1_CIF_ISP_HIST_CTRL_DATASEL_SET_V12(x) (((x) & 0x07) << 24)
> +#define RKISP1_CIF_ISP_HIST_CTRL_INTRSEL_SET_V12(x) (((x) & 0x01) << 27)
> +#define RKISP1_CIF_ISP_HIST_CTRL_WNDNUM_SET_V12(x) (((x) & 0x03) << 28)
> +#define RKISP1_CIF_ISP_HIST_CTRL_DBGEN_SET_V12(x) (((x) & 0x01) << 30)
> +#define RKISP1_CIF_ISP_HIST_ROW_NUM_V12 15
> +#define RKISP1_CIF_ISP_HIST_COLUMN_NUM_V12 15
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12 \
> + (RKISP1_CIF_ISP_HIST_ROW_NUM_V12 * RKISP1_CIF_ISP_HIST_COLUMN_NUM_V12)
> +
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(v0, v1, v2, v3) \
> + (((v0) & 0x3F) | (((v1) & 0x3F) << 8) |\
> + (((v2) & 0x3F) << 16) |\
> + (((v3) & 0x3F) << 24))
> +
> +#define RKISP1_CIF_ISP_HIST_OFFS_SET_V12(v0, v1) \
> + (((v0) & 0x1FFF) | (((v1) & 0x1FFF) << 16))
> +#define RKISP1_CIF_ISP_HIST_SIZE_SET_V12(v0, v1) \
> + (((v0) & 0x7FF) | (((v1) & 0x7FF) << 16))
> +
> +#define RKISP1_CIF_ISP_HIST_GET_BIN0_V12(x) \
> + ((x) & 0xFFFF)
> +#define RKISP1_CIF_ISP_HIST_GET_BIN1_V12(x) \
> + (((x) >> 16) & 0xFFFF)
> +
> /* AUTO FOCUS MEASUREMENT: ISP_AFM_CTRL */
> #define RKISP1_ISP_AFM_CTRL_ENABLE BIT(0)
>
> @@ -430,6 +462,8 @@
> #define RKISP1_CIF_ISP_AWB_MODE_YCBCR_EN ((0 << 31) | (0x2 << 0))
> #define RKISP1_CIF_ISP_AWB_MODE_MASK_NONE 0xFFFFFFFC
> #define RKISP1_CIF_ISP_AWB_MODE_READ(x) ((x) & 3)
> +#define RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(x) (((x) & 0x07) << 28)
> +#define RKISP1_CIF_ISP_AWB_SET_FRAMES_MASK_V12 RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(0x07)
> /* ISP_AWB_GAIN_RB, ISP_AWB_GAIN_G */
> #define RKISP1_CIF_ISP_AWB_GAIN_R_SET(x) (((x) & 0x3FF) << 16)
> #define RKISP1_CIF_ISP_AWB_GAIN_R_READ(x) (((x) >> 16) & 0x3FF)
> @@ -464,6 +498,7 @@
> /* ISP_EXP_CTRL */
> #define RKISP1_CIF_ISP_EXP_ENA BIT(0)
> #define RKISP1_CIF_ISP_EXP_CTRL_AUTOSTOP BIT(1)
> +#define RKISP1_CIF_ISP_EXP_CTRL_WNDNUM_SET_V12(x) (((x) & 0x03) << 2)
> /*
> *'1' luminance calculation according to Y=(R+G+B) x 0.332 (85/256)
> *'0' luminance calculation according to Y=16+0.25R+0.5G+0.1094B
> @@ -473,15 +508,22 @@
> /* ISP_EXP_H_SIZE */
> #define RKISP1_CIF_ISP_EXP_H_SIZE_SET_V10(x) ((x) & 0x7FF)
> #define RKISP1_CIF_ISP_EXP_HEIGHT_MASK_V10 0x000007FF
> +#define RKISP1_CIF_ISP_EXP_H_SIZE_SET_V12(x) ((x) & 0x7FF)
> +#define RKISP1_CIF_ISP_EXP_HEIGHT_MASK_V12 0x000007FF
> /* ISP_EXP_V_SIZE : vertical size must be a multiple of 2). */
> #define RKISP1_CIF_ISP_EXP_V_SIZE_SET_V10(x) ((x) & 0x7FE)
> +#define RKISP1_CIF_ISP_EXP_V_SIZE_SET_V12(x) (((x) & 0x7FE) << 16)
>
> /* ISP_EXP_H_OFFSET */
> #define RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V10(x) ((x) & 0x1FFF)
> #define RKISP1_CIF_ISP_EXP_MAX_HOFFS_V10 2424
> +#define RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V12(x) ((x) & 0x1FFF)
> +#define RKISP1_CIF_ISP_EXP_MAX_HOFFS_V12 0x1FFF
> /* ISP_EXP_V_OFFSET */
> #define RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V10(x) ((x) & 0x1FFF)
> #define RKISP1_CIF_ISP_EXP_MAX_VOFFS_V10 1806
> +#define RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V12(x) (((x) & 0x1FFF) << 16)
> +#define RKISP1_CIF_ISP_EXP_MAX_VOFFS_V12 0x1FFF
>
> #define RKISP1_CIF_ISP_EXP_ROW_NUM_V10 5
> #define RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 5
> @@ -500,13 +542,40 @@
> #define RKISP1_CIF_ISP_EXP_MIN_VSIZE_V10 \
> (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V10 * RKISP1_CIF_ISP_EXP_ROW_NUM_V10 + 1)
>
> +#define RKISP1_CIF_ISP_EXP_ROW_NUM_V12 15
> +#define RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 15
> +#define RKISP1_CIF_ISP_EXP_NUM_LUMA_REGS_V12 \
> + (RKISP1_CIF_ISP_EXP_ROW_NUM_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12)
> +
> +#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V12 0x7FF
> +#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V12 0xE
> +#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V12 0x7FE
> +#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V12 0xE
> +#define RKISP1_CIF_ISP_EXP_MAX_HSIZE_V12 \
> + (RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 + 1)
> +#define RKISP1_CIF_ISP_EXP_MIN_HSIZE_V12 \
> + (RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 + 1)
> +#define RKISP1_CIF_ISP_EXP_MAX_VSIZE_V12 \
> + (RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V12 * RKISP1_CIF_ISP_EXP_ROW_NUM_V12 + 1)
> +#define RKISP1_CIF_ISP_EXP_MIN_VSIZE_V12 \
> + (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V12 * RKISP1_CIF_ISP_EXP_ROW_NUM_V12 + 1)
> +
> +#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(x) ((x) & 0xFF)
> +#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy1_V12(x) (((x) >> 8) & 0xFF)
> +#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy2_V12(x) (((x) >> 16) & 0xFF)
> +#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy3_V12(x) (((x) >> 24) & 0xFF)
> +
> /* LSC: ISP_LSC_CTRL */
> #define RKISP1_CIF_ISP_LSC_CTRL_ENA BIT(0)
> #define RKISP1_CIF_ISP_LSC_SECT_SIZE_RESERVED 0xFC00FC00
> #define RKISP1_CIF_ISP_LSC_GRAD_RESERVED_V10 0xF000F000
> #define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED_V10 0xF000F000
> +#define RKISP1_CIF_ISP_LSC_GRAD_RESERVED_V12 0xE000E000
> +#define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED_V12 0xE000E000
> #define RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(v0, v1) \
> (((v0) & 0xFFF) | (((v1) & 0xFFF) << 12))
> +#define RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(v0, v1) \
> + (((v0) & 0x1FFF) | (((v1) & 0x1FFF) << 13))
> #define RKISP1_CIF_ISP_LSC_SECT_SIZE(v0, v1) \
> (((v0) & 0xFFF) | (((v1) & 0xFFF) << 16))
> #define RKISP1_CIF_ISP_LSC_GRAD_SIZE(v0, v1) \
> @@ -579,6 +648,10 @@
> (1 << 15) | (1 << 11) | (1 << 7) | (1 << 3))
> #define RKISP1_CIFISP_DEGAMMA_Y_RESERVED 0xFFFFF000
>
> +/* GAMMA-OUT */
> +#define RKISP1_CIF_ISP_GAMMA_VALUE_V12(x, y) \
> + (((x) & 0xFFF) << 16 | ((y) & 0xFFF) << 0)
> +
> /* AFM */
> #define RKISP1_CIF_ISP_AFM_ENA BIT(0)
> #define RKISP1_CIF_ISP_AFM_THRES_RESERVED 0xFFFF0000
> @@ -589,6 +662,11 @@
> #define RKISP1_CIF_ISP_AFM_WINDOW_Y_MIN 0x2
> #define RKISP1_CIF_ISP_AFM_WINDOW_X(x) (((x) & 0x1FFF) << 16)
> #define RKISP1_CIF_ISP_AFM_WINDOW_Y(x) ((x) & 0x1FFF)
> +#define RKISP1_CIF_ISP_AFM_SET_SHIFT_a_V12(x, y) (((x) & 0x7) << 16 | ((y) & 0x7) << 0)
> +#define RKISP1_CIF_ISP_AFM_SET_SHIFT_b_V12(x, y) (((x) & 0x7) << 20 | ((y) & 0x7) << 4)
> +#define RKISP1_CIF_ISP_AFM_SET_SHIFT_c_V12(x, y) (((x) & 0x7) << 24 | ((y) & 0x7) << 8)
> +#define RKISP1_CIF_ISP_AFM_GET_LUM_SHIFT_a_V12(x) (((x) & 0x70000) >> 16)
> +#define RKISP1_CIF_ISP_AFM_GET_AFM_SHIFT_a_V12(x) ((x) & 0x7)
>
> /* DPF */
> #define RKISP1_CIF_ISP_DPF_MODE_EN BIT(0)
> @@ -611,6 +689,7 @@
> #define RKISP1_CIF_CTRL_BASE 0x00000000
> #define RKISP1_CIF_CCL (RKISP1_CIF_CTRL_BASE + 0x00000000)
> #define RKISP1_CIF_VI_ID (RKISP1_CIF_CTRL_BASE + 0x00000008)
> +#define RKISP1_CIF_VI_ISP_CLK_CTRL_V12 (RKISP1_CIF_CTRL_BASE + 0x0000000C)
> #define RKISP1_CIF_ICCL (RKISP1_CIF_CTRL_BASE + 0x00000010)
> #define RKISP1_CIF_IRCL (RKISP1_CIF_CTRL_BASE + 0x00000014)
> #define RKISP1_CIF_VI_DPCL (RKISP1_CIF_CTRL_BASE + 0x00000018)
> @@ -708,6 +787,23 @@
> #define RKISP1_CIF_ISP_AWB_GAIN_RB_V10 (RKISP1_CIF_ISP_BASE + 0x0000013C)
> #define RKISP1_CIF_ISP_AWB_WHITE_CNT_V10 (RKISP1_CIF_ISP_BASE + 0x00000140)
> #define RKISP1_CIF_ISP_AWB_MEAN_V10 (RKISP1_CIF_ISP_BASE + 0x00000144)
> +#define RKISP1_CIF_ISP_AWB_PROP_V12 (RKISP1_CIF_ISP_BASE + 0x00000110)
> +#define RKISP1_CIF_ISP_AWB_SIZE_V12 (RKISP1_CIF_ISP_BASE + 0x00000114)
> +#define RKISP1_CIF_ISP_AWB_OFFS_V12 (RKISP1_CIF_ISP_BASE + 0x00000118)
> +#define RKISP1_CIF_ISP_AWB_REF_V12 (RKISP1_CIF_ISP_BASE + 0x0000011C)
> +#define RKISP1_CIF_ISP_AWB_THRESH_V12 (RKISP1_CIF_ISP_BASE + 0x00000120)
> +#define RKISP1_CIF_ISP_X_COOR12_V12 (RKISP1_CIF_ISP_BASE + 0x00000124)
> +#define RKISP1_CIF_ISP_X_COOR34_V12 (RKISP1_CIF_ISP_BASE + 0x00000128)
> +#define RKISP1_CIF_ISP_AWB_WHITE_CNT_V12 (RKISP1_CIF_ISP_BASE + 0x0000012C)
> +#define RKISP1_CIF_ISP_AWB_MEAN_V12 (RKISP1_CIF_ISP_BASE + 0x00000130)
> +#define RKISP1_CIF_ISP_DEGAIN_V12 (RKISP1_CIF_ISP_BASE + 0x00000134)
> +#define RKISP1_CIF_ISP_AWB_GAIN_G_V12 (RKISP1_CIF_ISP_BASE + 0x00000138)
> +#define RKISP1_CIF_ISP_AWB_GAIN_RB_V12 (RKISP1_CIF_ISP_BASE + 0x0000013C)
> +#define RKISP1_CIF_ISP_REGION_LINE_V12 (RKISP1_CIF_ISP_BASE + 0x00000140)
> +#define RKISP1_CIF_ISP_WP_CNT_REGION0_V12 (RKISP1_CIF_ISP_BASE + 0x00000160)
> +#define RKISP1_CIF_ISP_WP_CNT_REGION1_V12 (RKISP1_CIF_ISP_BASE + 0x00000164)
> +#define RKISP1_CIF_ISP_WP_CNT_REGION2_V12 (RKISP1_CIF_ISP_BASE + 0x00000168)
> +#define RKISP1_CIF_ISP_WP_CNT_REGION3_V12 (RKISP1_CIF_ISP_BASE + 0x0000016C)
> #define RKISP1_CIF_ISP_CC_COEFF_0 (RKISP1_CIF_ISP_BASE + 0x00000170)
> #define RKISP1_CIF_ISP_CC_COEFF_1 (RKISP1_CIF_ISP_BASE + 0x00000174)
> #define RKISP1_CIF_ISP_CC_COEFF_2 (RKISP1_CIF_ISP_BASE + 0x00000178)
> @@ -765,6 +861,8 @@
> #define RKISP1_CIF_ISP_CT_OFFSET_R (RKISP1_CIF_ISP_BASE + 0x00000248)
> #define RKISP1_CIF_ISP_CT_OFFSET_G (RKISP1_CIF_ISP_BASE + 0x0000024C)
> #define RKISP1_CIF_ISP_CT_OFFSET_B (RKISP1_CIF_ISP_BASE + 0x00000250)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_MODE_V12 (RKISP1_CIF_ISP_BASE + 0x00000300)
> +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V12 (RKISP1_CIF_ISP_BASE + 0x00000304)
>
> #define RKISP1_CIF_ISP_FLASH_BASE 0x00000660
> #define RKISP1_CIF_ISP_FLASH_CMD (RKISP1_CIF_ISP_FLASH_BASE + 0x00000000)
> @@ -1117,6 +1215,9 @@
> #define RKISP1_CIF_ISP_EXP_MEAN_24_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000006c)
> #define RKISP1_CIF_ISP_EXP_MEAN_34_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000070)
> #define RKISP1_CIF_ISP_EXP_MEAN_44_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000074)
> +#define RKISP1_CIF_ISP_EXP_SIZE_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x00000004)
> +#define RKISP1_CIF_ISP_EXP_OFFS_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x00000008)
> +#define RKISP1_CIF_ISP_EXP_MEAN_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x0000000c)
>
> #define RKISP1_CIF_ISP_BLS_BASE 0x00002700
> #define RKISP1_CIF_ISP_BLS_CTRL (RKISP1_CIF_ISP_BLS_BASE + 0x00000000)
> @@ -1277,6 +1378,16 @@
> #define RKISP1_CIF_ISP_WDR_TONECURVE_YM_31_SHD (RKISP1_CIF_ISP_WDR_BASE + 0x0000012C)
> #define RKISP1_CIF_ISP_WDR_TONECURVE_YM_32_SHD (RKISP1_CIF_ISP_WDR_BASE + 0x00000130)
>
> +#define RKISP1_CIF_ISP_HIST_BASE_V12 0x00002C00
> +#define RKISP1_CIF_ISP_HIST_CTRL_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000000)
> +#define RKISP1_CIF_ISP_HIST_SIZE_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000004)
> +#define RKISP1_CIF_ISP_HIST_OFFS_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000008)
> +#define RKISP1_CIF_ISP_HIST_DBG1_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000000C)
> +#define RKISP1_CIF_ISP_HIST_DBG2_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000001C)
> +#define RKISP1_CIF_ISP_HIST_DBG3_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000002C)
> +#define RKISP1_CIF_ISP_HIST_WEIGHT_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000003C)
> +#define RKISP1_CIF_ISP_HIST_BIN_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000120)
> +
> #define RKISP1_CIF_ISP_VSM_BASE 0x00002F00
> #define RKISP1_CIF_ISP_VSM_MODE (RKISP1_CIF_ISP_VSM_BASE + 0x00000000)
> #define RKISP1_CIF_ISP_VSM_H_OFFS (RKISP1_CIF_ISP_VSM_BASE + 0x00000004)
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> index 3f286c55ad60..dd99d7ea9ff6 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> @@ -196,6 +196,27 @@ static void rkisp1_stats_get_awb_meas_v10(struct rkisp1_stats *stats,
> RKISP1_CIF_ISP_AWB_GET_MEAN_Y_G(reg_val);
> }
>
> +static void rkisp1_stats_get_awb_meas_v12(struct rkisp1_stats *stats,
> + struct rkisp1_stat_buffer *pbuf)
> +{
> + /* Protect against concurrent access from ISR? */
> + struct rkisp1_device *rkisp1 = stats->rkisp1;
> + u32 reg_val;
> +
> + pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AWB;
> + reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_WHITE_CNT_V12);
> + pbuf->params.awb.awb_mean[0].cnt =
> + RKISP1_CIF_ISP_AWB_GET_PIXEL_CNT(reg_val);
> + reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_MEAN_V12);
> +
> + pbuf->params.awb.awb_mean[0].mean_cr_or_r =
> + RKISP1_CIF_ISP_AWB_GET_MEAN_CR_R(reg_val);
> + pbuf->params.awb.awb_mean[0].mean_cb_or_b =
> + RKISP1_CIF_ISP_AWB_GET_MEAN_CB_B(reg_val);
> + pbuf->params.awb.awb_mean[0].mean_y_or_g =
> + RKISP1_CIF_ISP_AWB_GET_MEAN_Y_G(reg_val);
> +}
> +
> static void rkisp1_stats_get_aec_meas_v10(struct rkisp1_stats *stats,
> struct rkisp1_stat_buffer *pbuf)
> {
> @@ -209,6 +230,30 @@ static void rkisp1_stats_get_aec_meas_v10(struct rkisp1_stats *stats,
> RKISP1_CIF_ISP_EXP_MEAN_00_V10 + i * 4);
> }
>
> +static void rkisp1_stats_get_aec_meas_v12(struct rkisp1_stats *stats,
> + struct rkisp1_stat_buffer *pbuf)
> +{
> + struct rkisp1_device *rkisp1 = stats->rkisp1;
> + u32 value;
> + int i;
> +
> + pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AUTOEXP;
> + for (i = 0; i < RKISP1_CIF_ISP_AE_MEAN_MAX_V12 / 4; i++) {
> + value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_EXP_MEAN_V12 + i * 4);
> + pbuf->params.ae.exp_mean[4 * i + 0] =
> + RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(value);
> + pbuf->params.ae.exp_mean[4 * i + 1] =
> + RKISP1_CIF_ISP_EXP_GET_MEAN_xy1_V12(value);
> + pbuf->params.ae.exp_mean[4 * i + 2] =
> + RKISP1_CIF_ISP_EXP_GET_MEAN_xy2_V12(value);
> + pbuf->params.ae.exp_mean[4 * i + 3] =
> + RKISP1_CIF_ISP_EXP_GET_MEAN_xy3_V12(value);
> + }
> +
> + value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_EXP_MEAN_V12 + i * 4);
> + pbuf->params.ae.exp_mean[4 * i + 0] = RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(value);
> +}
> +
> static void rkisp1_stats_get_afc_meas(struct rkisp1_stats *stats,
> struct rkisp1_stat_buffer *pbuf)
> {
> @@ -240,6 +285,23 @@ static void rkisp1_stats_get_hst_meas_v10(struct rkisp1_stats *stats,
> }
> }
>
> +static void rkisp1_stats_get_hst_meas_v12(struct rkisp1_stats *stats,
> + struct rkisp1_stat_buffer *pbuf)
> +{
> + struct rkisp1_device *rkisp1 = stats->rkisp1;
> + u32 value;
> + int i;
> +
> + pbuf->meas_type |= RKISP1_CIF_ISP_STAT_HIST;
> + for (i = 0; i < RKISP1_CIF_ISP_HIST_BIN_N_MAX_V12 / 2; i++) {
> + value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_HIST_BIN_V12 + i * 4);
> + pbuf->params.hist.hist_bins[2 * i] =
> + RKISP1_CIF_ISP_HIST_GET_BIN0_V12(value);
> + pbuf->params.hist.hist_bins[2 * i + 1] =
> + RKISP1_CIF_ISP_HIST_GET_BIN1_V12(value);
> + }
> +}
> +
> static void rkisp1_stats_get_bls_meas(struct rkisp1_stats *stats,
> struct rkisp1_stat_buffer *pbuf)
> {
> @@ -293,6 +355,12 @@ static struct rkisp1_stats_ops rkisp1_v10_stats_ops = {
> .get_hst_meas = rkisp1_stats_get_hst_meas_v10,
> };
>
> +static struct rkisp1_stats_ops rkisp1_v12_stats_ops = {
> + .get_awb_meas = rkisp1_stats_get_awb_meas_v12,
> + .get_aec_meas = rkisp1_stats_get_aec_meas_v12,
> + .get_hst_meas = rkisp1_stats_get_hst_meas_v12,
> +};
> +
> static void
> rkisp1_stats_send_measurement(struct rkisp1_stats *stats, u32 isp_ris)
> {
> @@ -361,7 +429,10 @@ static void rkisp1_init_stats(struct rkisp1_stats *stats)
> stats->vdev_fmt.fmt.meta.buffersize =
> sizeof(struct rkisp1_stat_buffer);
>
> - stats->ops = &rkisp1_v10_stats_ops;
> + if (stats->rkisp1->media_dev.hw_revision == RKISP1_V12)
> + stats->ops = &rkisp1_v12_stats_ops;
> + else
> + stats->ops = &rkisp1_v10_stats_ops;
> }
>
> int rkisp1_stats_register(struct rkisp1_device *rkisp1)
>
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 6/7] media: rockchip: rkisp1: add support for v12 isp variants
2021-06-15 6:33 ` Dafna Hirschfeld
@ 2021-06-15 22:31 ` Heiko Stübner
-1 siblings, 0 replies; 38+ messages in thread
From: Heiko Stübner @ 2021-06-15 22:31 UTC (permalink / raw)
To: mchehab, hverkuil-cisco, Dafna Hirschfeld
Cc: ezequiel, helen.koike, Laurent.pinchart, linux-rockchip, linux-media
Am Dienstag, 15. Juni 2021, 08:33:50 CEST schrieb Dafna Hirschfeld:
> Hi,
>
> On 15.06.21 03:37, Heiko Stuebner wrote:
> > From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> >
> > The rkisp1 evolved over soc generations and the rk3326/px30 introduced
> > the so called v12 - probably meaning v1.2.
> >
> > Add the new register definitions.
> >
> > Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> > ---
> > .../platform/rockchip/rkisp1/rkisp1-isp.c | 13 +
> > .../platform/rockchip/rkisp1/rkisp1-params.c | 338 +++++++++++++++++-
> > .../platform/rockchip/rkisp1/rkisp1-regs.h | 111 ++++++
> > .../platform/rockchip/rkisp1/rkisp1-stats.c | 73 +++-
> > 4 files changed, 533 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> > index 1de98e688008..36829e3bdda0 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> > @@ -408,6 +408,10 @@ static int rkisp1_config_mipi(struct rkisp1_device *rkisp1)
> >
> > rkisp1_write(rkisp1, mipi_ctrl, RKISP1_CIF_MIPI_CTRL);
> >
> > + /* V12 could also use a newer csi2-host, but we don't want that yet */
> > + if (rkisp1->media_dev.hw_revision == RKISP1_V12)
> > + rkisp1_write(rkisp1, 0, RKISP1_CIF_ISP_CSI0_CTRL0);
> > +
> > /* Configure Data Type and Virtual Channel */
> > rkisp1_write(rkisp1,
> > RKISP1_CIF_MIPI_DATA_SEL_DT(sink_fmt->mipi_dt) |
> > @@ -527,6 +531,15 @@ static void rkisp1_config_clk(struct rkisp1_device *rkisp1)
> > RKISP1_CIF_ICCL_DCROP_CLK;
> >
> > rkisp1_write(rkisp1, val, RKISP1_CIF_ICCL);
> > +
> > + /* ensure sp and mp can run at the same time in V12 */
> > + if (rkisp1->media_dev.hw_revision == RKISP1_V12) {
> > + val = RKISP1_CIF_CLK_CTRL_MI_Y12 | RKISP1_CIF_CLK_CTRL_MI_SP |
> > + RKISP1_CIF_CLK_CTRL_MI_RAW0 | RKISP1_CIF_CLK_CTRL_MI_RAW1 |
> > + RKISP1_CIF_CLK_CTRL_MI_READ | RKISP1_CIF_CLK_CTRL_MI_RAWRD |
> > + RKISP1_CIF_CLK_CTRL_CP | RKISP1_CIF_CLK_CTRL_IE;
> > + rkisp1_write(rkisp1, val, RKISP1_CIF_VI_ISP_CLK_CTRL_V12);
> > + }
> > }
> >
> > static void rkisp1_isp_start(struct rkisp1_device *rkisp1)
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> > index 427c7cc400b2..0d2b77dd11f5 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
>
> I wonder if we should add two new files 'rkisp1-params-v10.c' 'rkisp1-params-v12.c'
> and move all the callback implementations to those files so not to overload 'rkisp1-params.c'
I'm open to that ;-) ... just wondering if someone else might then
request all back into rkisp1-params.c
Another option would be to just leave it be and wait for what might be
needed for the new rkisp type.
Heiko
>
> Thanks,
> Dafna
>
> > @@ -255,6 +255,78 @@ rkisp1_lsc_matrix_config_v10(struct rkisp1_params *params,
> > RKISP1_CIF_ISP_LSC_TABLE_SEL);
> > }
> >
> > +static void
> > +rkisp1_lsc_matrix_config_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_lsc_config *pconfig)
> > +{
> > + unsigned int isp_lsc_status, sram_addr, isp_lsc_table_sel, i, j, data;
> > +
> > + isp_lsc_status = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_LSC_STATUS);
> > +
> > + /* RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_153 = ( 17 * 18 ) >> 1 */
> > + sram_addr = (isp_lsc_status & RKISP1_CIF_ISP_LSC_ACTIVE_TABLE) ?
> > + RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_0 :
> > + RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_153;
> > + rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_R_TABLE_ADDR);
> > + rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_GR_TABLE_ADDR);
> > + rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_GB_TABLE_ADDR);
> > + rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_B_TABLE_ADDR);
> > +
> > + /* program data tables (table size is 9 * 17 = 153) */
> > + for (i = 0; i < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; i++) {
> > + /*
> > + * 17 sectors with 2 values in one DWORD = 9
> > + * DWORDs (2nd value of last DWORD unused)
> > + */
> > + for (j = 0; j < RKISP1_CIF_ISP_LSC_SAMPLES_MAX - 1; j += 2) {
> > + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
> > + pconfig->r_data_tbl[i][j],
> > + pconfig->r_data_tbl[i][j + 1]);
> > + rkisp1_write(params->rkisp1, data,
> > + RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
> > +
> > + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
> > + pconfig->gr_data_tbl[i][j],
> > + pconfig->gr_data_tbl[i][j + 1]);
> > + rkisp1_write(params->rkisp1, data,
> > + RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
> > +
> > + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
> > + pconfig->gb_data_tbl[i][j],
> > + pconfig->gb_data_tbl[i][j + 1]);
> > + rkisp1_write(params->rkisp1, data,
> > + RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
> > +
> > + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
> > + pconfig->b_data_tbl[i][j],
> > + pconfig->b_data_tbl[i][j + 1]);
> > + rkisp1_write(params->rkisp1, data,
> > + RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
> > + }
> > +
> > + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->r_data_tbl[i][j], 0);
> > + rkisp1_write(params->rkisp1, data,
> > + RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
> > +
> > + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->gr_data_tbl[i][j], 0);
> > + rkisp1_write(params->rkisp1, data,
> > + RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
> > +
> > + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->gb_data_tbl[i][j], 0);
> > + rkisp1_write(params->rkisp1, data,
> > + RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
> > +
> > + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->b_data_tbl[i][j], 0);
> > + rkisp1_write(params->rkisp1, data,
> > + RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
> > + }
> > + isp_lsc_table_sel = (isp_lsc_status & RKISP1_CIF_ISP_LSC_ACTIVE_TABLE) ?
> > + RKISP1_CIF_ISP_LSC_TABLE_0 :
> > + RKISP1_CIF_ISP_LSC_TABLE_1;
> > + rkisp1_write(params->rkisp1, isp_lsc_table_sel,
> > + RKISP1_CIF_ISP_LSC_TABLE_SEL);
> > +}
> > +
> > static void rkisp1_lsc_config(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_lsc_config *arg)
> > {
> > @@ -396,6 +468,25 @@ static void rkisp1_goc_config_v10(struct rkisp1_params *params,
> > RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V10 + i * 4);
> > }
> >
> > +static void rkisp1_goc_config_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_goc_config *arg)
> > +{
> > + unsigned int i;
> > + u32 value;
> > +
> > + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
> > + RKISP1_CIF_ISP_CTRL_ISP_GAMMA_OUT_ENA);
> > + rkisp1_write(params->rkisp1, arg->mode, RKISP1_CIF_ISP_GAMMA_OUT_MODE_V12);
> > +
> > + for (i = 0; i < RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V12 / 2; i++) {
> > + value = RKISP1_CIF_ISP_GAMMA_VALUE_V12(
> > + arg->gamma_y[2 * i + 1],
> > + arg->gamma_y[2 * i]);
> > + rkisp1_write(params->rkisp1, value,
> > + RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V12 + i * 4);
> > + }
> > +}
> > +
> > /* ISP Cross Talk */
> > static void rkisp1_ctk_config(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_ctk_config *arg)
> > @@ -473,6 +564,45 @@ static void rkisp1_awb_meas_config_v10(struct rkisp1_params *params,
> > arg->frames, RKISP1_CIF_ISP_AWB_FRAMES_V10);
> > }
> >
> > +static void rkisp1_awb_meas_config_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_awb_meas_config *arg)
> > +{
> > + u32 reg_val = 0;
> > + /* based on the mode,configure the awb module */
> > + if (arg->awb_mode == RKISP1_CIF_ISP_AWB_MODE_YCBCR) {
> > + /* Reference Cb and Cr */
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_AWB_REF_CR_SET(arg->awb_ref_cr) |
> > + arg->awb_ref_cb, RKISP1_CIF_ISP_AWB_REF_V12);
> > + /* Yc Threshold */
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_AWB_MAX_Y_SET(arg->max_y) |
> > + RKISP1_CIF_ISP_AWB_MIN_Y_SET(arg->min_y) |
> > + RKISP1_CIF_ISP_AWB_MAX_CS_SET(arg->max_csum) |
> > + arg->min_c, RKISP1_CIF_ISP_AWB_THRESH_V12);
> > + }
> > +
> > + reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V12);
> > + if (arg->enable_ymax_cmp)
> > + reg_val |= RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
> > + else
> > + reg_val &= ~RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
> > + reg_val &= ~RKISP1_CIF_ISP_AWB_SET_FRAMES_MASK_V12;
> > + reg_val |= RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(arg->frames);
> > + rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
> > +
> > + /* window offset */
> > + rkisp1_write(params->rkisp1,
> > + arg->awb_wnd.v_offs << 16 |
> > + arg->awb_wnd.h_offs,
> > + RKISP1_CIF_ISP_AWB_OFFS_V12);
> > + /* AWB window size */
> > + rkisp1_write(params->rkisp1,
> > + arg->awb_wnd.v_size << 16 |
> > + arg->awb_wnd.h_size,
> > + RKISP1_CIF_ISP_AWB_SIZE_V12);
> > +}
> > +
> > static void
> > rkisp1_awb_meas_enable_v10(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_awb_meas_config *arg,
> > @@ -502,6 +632,35 @@ rkisp1_awb_meas_enable_v10(struct rkisp1_params *params,
> > }
> > }
> >
> > +static void
> > +rkisp1_awb_meas_enable_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_awb_meas_config *arg,
> > + bool en)
> > +{
> > + u32 reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V12);
> > +
> > + /* switch off */
> > + reg_val &= RKISP1_CIF_ISP_AWB_MODE_MASK_NONE;
> > +
> > + if (en) {
> > + if (arg->awb_mode == RKISP1_CIF_ISP_AWB_MODE_RGB)
> > + reg_val |= RKISP1_CIF_ISP_AWB_MODE_RGB_EN;
> > + else
> > + reg_val |= RKISP1_CIF_ISP_AWB_MODE_YCBCR_EN;
> > +
> > + rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
> > +
> > + /* Measurements require AWB block be active. */
> > + rkisp1_param_set_bits(params, RKISP1_CIF_ISP_CTRL,
> > + RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
> > + } else {
> > + rkisp1_write(params->rkisp1,
> > + reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
> > + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
> > + RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
> > + }
> > +}
> > +
> > static void
> > rkisp1_awb_gain_config_v10(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_awb_gain_config *arg)
> > @@ -515,6 +674,19 @@ rkisp1_awb_gain_config_v10(struct rkisp1_params *params,
> > arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB_V10);
> > }
> >
> > +static void
> > +rkisp1_awb_gain_config_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_awb_gain_config *arg)
> > +{
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_green_r) |
> > + arg->gain_green_b, RKISP1_CIF_ISP_AWB_GAIN_G_V12);
> > +
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_red) |
> > + arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB_V12);
> > +}
> > +
> > static void rkisp1_aec_config_v10(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_aec_config *arg)
> > {
> > @@ -548,6 +720,38 @@ static void rkisp1_aec_config_v10(struct rkisp1_params *params,
> > RKISP1_CIF_ISP_EXP_V_SIZE_V10);
> > }
> >
> > +static void rkisp1_aec_config_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_aec_config *arg)
> > +{
> > + u32 exp_ctrl;
> > + u32 block_hsize, block_vsize;
> > + u32 wnd_num_idx = 1;
> > + const u32 ae_wnd_num[] = { 5, 9, 15, 15 };
> > +
> > + /* avoid to override the old enable value */
> > + exp_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_EXP_CTRL);
> > + exp_ctrl &= RKISP1_CIF_ISP_EXP_ENA;
> > + if (arg->autostop)
> > + exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_AUTOSTOP;
> > + if (arg->mode == RKISP1_CIF_ISP_EXP_MEASURING_MODE_1)
> > + exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_MEASMODE_1;
> > + exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_WNDNUM_SET_V12(wnd_num_idx);
> > + rkisp1_write(params->rkisp1, exp_ctrl, RKISP1_CIF_ISP_EXP_CTRL);
> > +
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V12(arg->meas_window.v_offs) |
> > + RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V12(arg->meas_window.h_offs),
> > + RKISP1_CIF_ISP_EXP_OFFS_V12);
> > +
> > + block_hsize = arg->meas_window.h_size / ae_wnd_num[wnd_num_idx] - 1;
> > + block_vsize = arg->meas_window.v_size / ae_wnd_num[wnd_num_idx] - 1;
> > +
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_EXP_V_SIZE_SET_V12(block_vsize) |
> > + RKISP1_CIF_ISP_EXP_H_SIZE_SET_V12(block_hsize),
> > + RKISP1_CIF_ISP_EXP_SIZE_V12);
> > +}
> > +
> > static void rkisp1_cproc_config(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_cproc_config *arg)
> > {
> > @@ -625,6 +829,64 @@ static void rkisp1_hst_config_v10(struct rkisp1_params *params,
> > rkisp1_write(params->rkisp1, weight[0] & 0x1F, RKISP1_CIF_ISP_HIST_WEIGHT_44_V10);
> > }
> >
> > +static void rkisp1_hst_config_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_hst_config *arg)
> > +{
> > + unsigned int i, j;
> > + u32 block_hsize, block_vsize;
> > + u32 wnd_num_idx, hist_weight_num, hist_ctrl, value;
> > + u8 weight15x15[RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12];
> > + const u32 hist_wnd_num[] = { 5, 9, 15, 15 };
> > +
> > + /* now we just support 9x9 window */
> > + wnd_num_idx = 1;
> > + memset(weight15x15, 0x00, sizeof(weight15x15));
> > + /* avoid to override the old enable value */
> > + hist_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_HIST_CTRL_V12);
> > + hist_ctrl &= RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 |
> > + RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12;
> > + hist_ctrl = hist_ctrl |
> > + RKISP1_CIF_ISP_HIST_CTRL_INTRSEL_SET_V12(1) |
> > + RKISP1_CIF_ISP_HIST_CTRL_DATASEL_SET_V12(0) |
> > + RKISP1_CIF_ISP_HIST_CTRL_WATERLINE_SET_V12(0) |
> > + RKISP1_CIF_ISP_HIST_CTRL_AUTOSTOP_SET_V12(0) |
> > + RKISP1_CIF_ISP_HIST_CTRL_WNDNUM_SET_V12(1) |
> > + RKISP1_CIF_ISP_HIST_CTRL_STEPSIZE_SET_V12(arg->histogram_predivider);
> > + rkisp1_write(params->rkisp1, hist_ctrl, RKISP1_CIF_ISP_HIST_CTRL_V12);
> > +
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_HIST_OFFS_SET_V12(arg->meas_window.h_offs,
> > + arg->meas_window.v_offs),
> > + RKISP1_CIF_ISP_HIST_OFFS_V12);
> > +
> > + block_hsize = arg->meas_window.h_size / hist_wnd_num[wnd_num_idx] - 1;
> > + block_vsize = arg->meas_window.v_size / hist_wnd_num[wnd_num_idx] - 1;
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_HIST_SIZE_SET_V12(block_hsize, block_vsize),
> > + RKISP1_CIF_ISP_HIST_SIZE_V12);
> > +
> > + for (i = 0; i < hist_wnd_num[wnd_num_idx]; i++) {
> > + for (j = 0; j < hist_wnd_num[wnd_num_idx]; j++) {
> > + weight15x15[i * RKISP1_CIF_ISP_HIST_ROW_NUM_V12 + j] =
> > + arg->hist_weight[i * hist_wnd_num[wnd_num_idx] + j];
> > + }
> > + }
> > +
> > + hist_weight_num = RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12;
> > + for (i = 0; i < (hist_weight_num / 4); i++) {
> > + value = RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(
> > + weight15x15[4 * i + 0],
> > + weight15x15[4 * i + 1],
> > + weight15x15[4 * i + 2],
> > + weight15x15[4 * i + 3]);
> > + rkisp1_write(params->rkisp1, value,
> > + RKISP1_CIF_ISP_HIST_WEIGHT_V12 + 4 * i);
> > + }
> > + value = RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(weight15x15[4 * i + 0], 0, 0, 0);
> > + rkisp1_write(params->rkisp1, value,
> > + RKISP1_CIF_ISP_HIST_WEIGHT_V12 + 4 * i);
> > +}
> > +
> > static void
> > rkisp1_hst_enable_v10(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_hst_config *arg, bool en)
> > @@ -643,6 +905,26 @@ rkisp1_hst_enable_v10(struct rkisp1_params *params,
> > }
> > }
> >
> > +static void
> > +rkisp1_hst_enable_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_hst_config *arg, bool en)
> > +{
> > + if (en) {
> > + u32 hist_ctrl = rkisp1_read(params->rkisp1,
> > + RKISP1_CIF_ISP_HIST_CTRL_V12);
> > +
> > + hist_ctrl &= ~RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12;
> > + hist_ctrl |= RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(arg->mode);
> > + hist_ctrl |= RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(1);
> > + rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_CTRL_V12,
> > + hist_ctrl);
> > + } else {
> > + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_HIST_CTRL_V12,
> > + RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 |
> > + RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12);
> > + }
> > +}
> > +
> > static void rkisp1_afm_config_v10(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_afc_config *arg)
> > {
> > @@ -674,6 +956,45 @@ static void rkisp1_afm_config_v10(struct rkisp1_params *params,
> > rkisp1_write(params->rkisp1, afm_ctrl, RKISP1_CIF_ISP_AFM_CTRL);
> > }
> >
> > +static void rkisp1_afm_config_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_afc_config *arg)
> > +{
> > + size_t num_of_win = min_t(size_t, ARRAY_SIZE(arg->afm_win),
> > + arg->num_afm_win);
> > + u32 afm_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AFM_CTRL);
> > + u32 lum_var_shift, afm_var_shift;
> > + unsigned int i;
> > +
> > + /* Switch off to configure. */
> > + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
> > + RKISP1_CIF_ISP_AFM_ENA);
> > +
> > + for (i = 0; i < num_of_win; i++) {
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_AFM_WINDOW_X(arg->afm_win[i].h_offs) |
> > + RKISP1_CIF_ISP_AFM_WINDOW_Y(arg->afm_win[i].v_offs),
> > + RKISP1_CIF_ISP_AFM_LT_A + i * 8);
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_AFM_WINDOW_X(arg->afm_win[i].h_size +
> > + arg->afm_win[i].h_offs) |
> > + RKISP1_CIF_ISP_AFM_WINDOW_Y(arg->afm_win[i].v_size +
> > + arg->afm_win[i].v_offs),
> > + RKISP1_CIF_ISP_AFM_RB_A + i * 8);
> > + }
> > + rkisp1_write(params->rkisp1, arg->thres, RKISP1_CIF_ISP_AFM_THRES);
> > +
> > + lum_var_shift = RKISP1_CIF_ISP_AFM_GET_LUM_SHIFT_a_V12(arg->var_shift);
> > + afm_var_shift = RKISP1_CIF_ISP_AFM_GET_AFM_SHIFT_a_V12(arg->var_shift);
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_AFM_SET_SHIFT_a_V12(lum_var_shift, afm_var_shift) |
> > + RKISP1_CIF_ISP_AFM_SET_SHIFT_b_V12(lum_var_shift, afm_var_shift) |
> > + RKISP1_CIF_ISP_AFM_SET_SHIFT_c_V12(lum_var_shift, afm_var_shift),
> > + RKISP1_CIF_ISP_AFM_VAR_SHIFT);
> > +
> > + /* restore afm status */
> > + rkisp1_write(params->rkisp1, afm_ctrl, RKISP1_CIF_ISP_AFM_CTRL);
> > +}
> > +
> > static void rkisp1_ie_config(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_ie_config *arg)
> > {
> > @@ -1305,6 +1626,18 @@ static struct rkisp1_params_ops rkisp1_v10_params_ops = {
> > .afm_config = rkisp1_afm_config_v10,
> > };
> >
> > +static struct rkisp1_params_ops rkisp1_v12_params_ops = {
> > + .lsc_matrix_config = rkisp1_lsc_matrix_config_v12,
> > + .goc_config = rkisp1_goc_config_v12,
> > + .awb_meas_config = rkisp1_awb_meas_config_v12,
> > + .awb_meas_enable = rkisp1_awb_meas_enable_v12,
> > + .awb_gain_config = rkisp1_awb_gain_config_v12,
> > + .aec_config = rkisp1_aec_config_v12,
> > + .hst_config = rkisp1_hst_config_v12,
> > + .hst_enable = rkisp1_hst_enable_v12,
> > + .afm_config = rkisp1_afm_config_v12,
> > +};
> > +
> > static int rkisp1_params_enum_fmt_meta_out(struct file *file, void *priv,
> > struct v4l2_fmtdesc *f)
> > {
> > @@ -1472,7 +1805,10 @@ static void rkisp1_init_params(struct rkisp1_params *params)
> > params->vdev_fmt.fmt.meta.buffersize =
> > sizeof(struct rkisp1_params_cfg);
> >
> > - params->ops = &rkisp1_v10_params_ops;
> > + if (params->rkisp1->media_dev.hw_revision == RKISP1_V12)
> > + params->ops = &rkisp1_v12_params_ops;
> > + else
> > + params->ops = &rkisp1_v10_params_ops;
> > }
> >
> > int rkisp1_params_register(struct rkisp1_device *rkisp1)
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> > index c71ccd148bde..d326214c7e07 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> > @@ -396,6 +396,38 @@
> > #define RKISP1_CIF_ISP_HIST_COLUMN_NUM_V10 5
> > #define RKISP1_CIF_ISP_HIST_GET_BIN_V10(x) ((x) & 0x000FFFFF)
> >
> > +/* ISP HISTOGRAM CALCULATION : CIF_ISP_HIST */
> > +#define RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(x) (((x) & 0x01) << 0)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12 RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(0x01)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_STEPSIZE_SET_V12(x) (((x) & 0x7F) << 1)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(x) (((x) & 0x07) << 8)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(0x07)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_AUTOSTOP_SET_V12(x) (((x) & 0x01) << 11)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_WATERLINE_SET_V12(x) (((x) & 0xFFF) << 12)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_DATASEL_SET_V12(x) (((x) & 0x07) << 24)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_INTRSEL_SET_V12(x) (((x) & 0x01) << 27)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_WNDNUM_SET_V12(x) (((x) & 0x03) << 28)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_DBGEN_SET_V12(x) (((x) & 0x01) << 30)
> > +#define RKISP1_CIF_ISP_HIST_ROW_NUM_V12 15
> > +#define RKISP1_CIF_ISP_HIST_COLUMN_NUM_V12 15
> > +#define RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12 \
> > + (RKISP1_CIF_ISP_HIST_ROW_NUM_V12 * RKISP1_CIF_ISP_HIST_COLUMN_NUM_V12)
> > +
> > +#define RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(v0, v1, v2, v3) \
> > + (((v0) & 0x3F) | (((v1) & 0x3F) << 8) |\
> > + (((v2) & 0x3F) << 16) |\
> > + (((v3) & 0x3F) << 24))
> > +
> > +#define RKISP1_CIF_ISP_HIST_OFFS_SET_V12(v0, v1) \
> > + (((v0) & 0x1FFF) | (((v1) & 0x1FFF) << 16))
> > +#define RKISP1_CIF_ISP_HIST_SIZE_SET_V12(v0, v1) \
> > + (((v0) & 0x7FF) | (((v1) & 0x7FF) << 16))
> > +
> > +#define RKISP1_CIF_ISP_HIST_GET_BIN0_V12(x) \
> > + ((x) & 0xFFFF)
> > +#define RKISP1_CIF_ISP_HIST_GET_BIN1_V12(x) \
> > + (((x) >> 16) & 0xFFFF)
> > +
> > /* AUTO FOCUS MEASUREMENT: ISP_AFM_CTRL */
> > #define RKISP1_ISP_AFM_CTRL_ENABLE BIT(0)
> >
> > @@ -430,6 +462,8 @@
> > #define RKISP1_CIF_ISP_AWB_MODE_YCBCR_EN ((0 << 31) | (0x2 << 0))
> > #define RKISP1_CIF_ISP_AWB_MODE_MASK_NONE 0xFFFFFFFC
> > #define RKISP1_CIF_ISP_AWB_MODE_READ(x) ((x) & 3)
> > +#define RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(x) (((x) & 0x07) << 28)
> > +#define RKISP1_CIF_ISP_AWB_SET_FRAMES_MASK_V12 RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(0x07)
> > /* ISP_AWB_GAIN_RB, ISP_AWB_GAIN_G */
> > #define RKISP1_CIF_ISP_AWB_GAIN_R_SET(x) (((x) & 0x3FF) << 16)
> > #define RKISP1_CIF_ISP_AWB_GAIN_R_READ(x) (((x) >> 16) & 0x3FF)
> > @@ -464,6 +498,7 @@
> > /* ISP_EXP_CTRL */
> > #define RKISP1_CIF_ISP_EXP_ENA BIT(0)
> > #define RKISP1_CIF_ISP_EXP_CTRL_AUTOSTOP BIT(1)
> > +#define RKISP1_CIF_ISP_EXP_CTRL_WNDNUM_SET_V12(x) (((x) & 0x03) << 2)
> > /*
> > *'1' luminance calculation according to Y=(R+G+B) x 0.332 (85/256)
> > *'0' luminance calculation according to Y=16+0.25R+0.5G+0.1094B
> > @@ -473,15 +508,22 @@
> > /* ISP_EXP_H_SIZE */
> > #define RKISP1_CIF_ISP_EXP_H_SIZE_SET_V10(x) ((x) & 0x7FF)
> > #define RKISP1_CIF_ISP_EXP_HEIGHT_MASK_V10 0x000007FF
> > +#define RKISP1_CIF_ISP_EXP_H_SIZE_SET_V12(x) ((x) & 0x7FF)
> > +#define RKISP1_CIF_ISP_EXP_HEIGHT_MASK_V12 0x000007FF
> > /* ISP_EXP_V_SIZE : vertical size must be a multiple of 2). */
> > #define RKISP1_CIF_ISP_EXP_V_SIZE_SET_V10(x) ((x) & 0x7FE)
> > +#define RKISP1_CIF_ISP_EXP_V_SIZE_SET_V12(x) (((x) & 0x7FE) << 16)
> >
> > /* ISP_EXP_H_OFFSET */
> > #define RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V10(x) ((x) & 0x1FFF)
> > #define RKISP1_CIF_ISP_EXP_MAX_HOFFS_V10 2424
> > +#define RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V12(x) ((x) & 0x1FFF)
> > +#define RKISP1_CIF_ISP_EXP_MAX_HOFFS_V12 0x1FFF
> > /* ISP_EXP_V_OFFSET */
> > #define RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V10(x) ((x) & 0x1FFF)
> > #define RKISP1_CIF_ISP_EXP_MAX_VOFFS_V10 1806
> > +#define RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V12(x) (((x) & 0x1FFF) << 16)
> > +#define RKISP1_CIF_ISP_EXP_MAX_VOFFS_V12 0x1FFF
> >
> > #define RKISP1_CIF_ISP_EXP_ROW_NUM_V10 5
> > #define RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 5
> > @@ -500,13 +542,40 @@
> > #define RKISP1_CIF_ISP_EXP_MIN_VSIZE_V10 \
> > (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V10 * RKISP1_CIF_ISP_EXP_ROW_NUM_V10 + 1)
> >
> > +#define RKISP1_CIF_ISP_EXP_ROW_NUM_V12 15
> > +#define RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 15
> > +#define RKISP1_CIF_ISP_EXP_NUM_LUMA_REGS_V12 \
> > + (RKISP1_CIF_ISP_EXP_ROW_NUM_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12)
> > +
> > +#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V12 0x7FF
> > +#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V12 0xE
> > +#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V12 0x7FE
> > +#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V12 0xE
> > +#define RKISP1_CIF_ISP_EXP_MAX_HSIZE_V12 \
> > + (RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 + 1)
> > +#define RKISP1_CIF_ISP_EXP_MIN_HSIZE_V12 \
> > + (RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 + 1)
> > +#define RKISP1_CIF_ISP_EXP_MAX_VSIZE_V12 \
> > + (RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V12 * RKISP1_CIF_ISP_EXP_ROW_NUM_V12 + 1)
> > +#define RKISP1_CIF_ISP_EXP_MIN_VSIZE_V12 \
> > + (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V12 * RKISP1_CIF_ISP_EXP_ROW_NUM_V12 + 1)
> > +
> > +#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(x) ((x) & 0xFF)
> > +#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy1_V12(x) (((x) >> 8) & 0xFF)
> > +#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy2_V12(x) (((x) >> 16) & 0xFF)
> > +#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy3_V12(x) (((x) >> 24) & 0xFF)
> > +
> > /* LSC: ISP_LSC_CTRL */
> > #define RKISP1_CIF_ISP_LSC_CTRL_ENA BIT(0)
> > #define RKISP1_CIF_ISP_LSC_SECT_SIZE_RESERVED 0xFC00FC00
> > #define RKISP1_CIF_ISP_LSC_GRAD_RESERVED_V10 0xF000F000
> > #define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED_V10 0xF000F000
> > +#define RKISP1_CIF_ISP_LSC_GRAD_RESERVED_V12 0xE000E000
> > +#define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED_V12 0xE000E000
> > #define RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(v0, v1) \
> > (((v0) & 0xFFF) | (((v1) & 0xFFF) << 12))
> > +#define RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(v0, v1) \
> > + (((v0) & 0x1FFF) | (((v1) & 0x1FFF) << 13))
> > #define RKISP1_CIF_ISP_LSC_SECT_SIZE(v0, v1) \
> > (((v0) & 0xFFF) | (((v1) & 0xFFF) << 16))
> > #define RKISP1_CIF_ISP_LSC_GRAD_SIZE(v0, v1) \
> > @@ -579,6 +648,10 @@
> > (1 << 15) | (1 << 11) | (1 << 7) | (1 << 3))
> > #define RKISP1_CIFISP_DEGAMMA_Y_RESERVED 0xFFFFF000
> >
> > +/* GAMMA-OUT */
> > +#define RKISP1_CIF_ISP_GAMMA_VALUE_V12(x, y) \
> > + (((x) & 0xFFF) << 16 | ((y) & 0xFFF) << 0)
> > +
> > /* AFM */
> > #define RKISP1_CIF_ISP_AFM_ENA BIT(0)
> > #define RKISP1_CIF_ISP_AFM_THRES_RESERVED 0xFFFF0000
> > @@ -589,6 +662,11 @@
> > #define RKISP1_CIF_ISP_AFM_WINDOW_Y_MIN 0x2
> > #define RKISP1_CIF_ISP_AFM_WINDOW_X(x) (((x) & 0x1FFF) << 16)
> > #define RKISP1_CIF_ISP_AFM_WINDOW_Y(x) ((x) & 0x1FFF)
> > +#define RKISP1_CIF_ISP_AFM_SET_SHIFT_a_V12(x, y) (((x) & 0x7) << 16 | ((y) & 0x7) << 0)
> > +#define RKISP1_CIF_ISP_AFM_SET_SHIFT_b_V12(x, y) (((x) & 0x7) << 20 | ((y) & 0x7) << 4)
> > +#define RKISP1_CIF_ISP_AFM_SET_SHIFT_c_V12(x, y) (((x) & 0x7) << 24 | ((y) & 0x7) << 8)
> > +#define RKISP1_CIF_ISP_AFM_GET_LUM_SHIFT_a_V12(x) (((x) & 0x70000) >> 16)
> > +#define RKISP1_CIF_ISP_AFM_GET_AFM_SHIFT_a_V12(x) ((x) & 0x7)
> >
> > /* DPF */
> > #define RKISP1_CIF_ISP_DPF_MODE_EN BIT(0)
> > @@ -611,6 +689,7 @@
> > #define RKISP1_CIF_CTRL_BASE 0x00000000
> > #define RKISP1_CIF_CCL (RKISP1_CIF_CTRL_BASE + 0x00000000)
> > #define RKISP1_CIF_VI_ID (RKISP1_CIF_CTRL_BASE + 0x00000008)
> > +#define RKISP1_CIF_VI_ISP_CLK_CTRL_V12 (RKISP1_CIF_CTRL_BASE + 0x0000000C)
> > #define RKISP1_CIF_ICCL (RKISP1_CIF_CTRL_BASE + 0x00000010)
> > #define RKISP1_CIF_IRCL (RKISP1_CIF_CTRL_BASE + 0x00000014)
> > #define RKISP1_CIF_VI_DPCL (RKISP1_CIF_CTRL_BASE + 0x00000018)
> > @@ -708,6 +787,23 @@
> > #define RKISP1_CIF_ISP_AWB_GAIN_RB_V10 (RKISP1_CIF_ISP_BASE + 0x0000013C)
> > #define RKISP1_CIF_ISP_AWB_WHITE_CNT_V10 (RKISP1_CIF_ISP_BASE + 0x00000140)
> > #define RKISP1_CIF_ISP_AWB_MEAN_V10 (RKISP1_CIF_ISP_BASE + 0x00000144)
> > +#define RKISP1_CIF_ISP_AWB_PROP_V12 (RKISP1_CIF_ISP_BASE + 0x00000110)
> > +#define RKISP1_CIF_ISP_AWB_SIZE_V12 (RKISP1_CIF_ISP_BASE + 0x00000114)
> > +#define RKISP1_CIF_ISP_AWB_OFFS_V12 (RKISP1_CIF_ISP_BASE + 0x00000118)
> > +#define RKISP1_CIF_ISP_AWB_REF_V12 (RKISP1_CIF_ISP_BASE + 0x0000011C)
> > +#define RKISP1_CIF_ISP_AWB_THRESH_V12 (RKISP1_CIF_ISP_BASE + 0x00000120)
> > +#define RKISP1_CIF_ISP_X_COOR12_V12 (RKISP1_CIF_ISP_BASE + 0x00000124)
> > +#define RKISP1_CIF_ISP_X_COOR34_V12 (RKISP1_CIF_ISP_BASE + 0x00000128)
> > +#define RKISP1_CIF_ISP_AWB_WHITE_CNT_V12 (RKISP1_CIF_ISP_BASE + 0x0000012C)
> > +#define RKISP1_CIF_ISP_AWB_MEAN_V12 (RKISP1_CIF_ISP_BASE + 0x00000130)
> > +#define RKISP1_CIF_ISP_DEGAIN_V12 (RKISP1_CIF_ISP_BASE + 0x00000134)
> > +#define RKISP1_CIF_ISP_AWB_GAIN_G_V12 (RKISP1_CIF_ISP_BASE + 0x00000138)
> > +#define RKISP1_CIF_ISP_AWB_GAIN_RB_V12 (RKISP1_CIF_ISP_BASE + 0x0000013C)
> > +#define RKISP1_CIF_ISP_REGION_LINE_V12 (RKISP1_CIF_ISP_BASE + 0x00000140)
> > +#define RKISP1_CIF_ISP_WP_CNT_REGION0_V12 (RKISP1_CIF_ISP_BASE + 0x00000160)
> > +#define RKISP1_CIF_ISP_WP_CNT_REGION1_V12 (RKISP1_CIF_ISP_BASE + 0x00000164)
> > +#define RKISP1_CIF_ISP_WP_CNT_REGION2_V12 (RKISP1_CIF_ISP_BASE + 0x00000168)
> > +#define RKISP1_CIF_ISP_WP_CNT_REGION3_V12 (RKISP1_CIF_ISP_BASE + 0x0000016C)
> > #define RKISP1_CIF_ISP_CC_COEFF_0 (RKISP1_CIF_ISP_BASE + 0x00000170)
> > #define RKISP1_CIF_ISP_CC_COEFF_1 (RKISP1_CIF_ISP_BASE + 0x00000174)
> > #define RKISP1_CIF_ISP_CC_COEFF_2 (RKISP1_CIF_ISP_BASE + 0x00000178)
> > @@ -765,6 +861,8 @@
> > #define RKISP1_CIF_ISP_CT_OFFSET_R (RKISP1_CIF_ISP_BASE + 0x00000248)
> > #define RKISP1_CIF_ISP_CT_OFFSET_G (RKISP1_CIF_ISP_BASE + 0x0000024C)
> > #define RKISP1_CIF_ISP_CT_OFFSET_B (RKISP1_CIF_ISP_BASE + 0x00000250)
> > +#define RKISP1_CIF_ISP_GAMMA_OUT_MODE_V12 (RKISP1_CIF_ISP_BASE + 0x00000300)
> > +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V12 (RKISP1_CIF_ISP_BASE + 0x00000304)
> >
> > #define RKISP1_CIF_ISP_FLASH_BASE 0x00000660
> > #define RKISP1_CIF_ISP_FLASH_CMD (RKISP1_CIF_ISP_FLASH_BASE + 0x00000000)
> > @@ -1117,6 +1215,9 @@
> > #define RKISP1_CIF_ISP_EXP_MEAN_24_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000006c)
> > #define RKISP1_CIF_ISP_EXP_MEAN_34_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000070)
> > #define RKISP1_CIF_ISP_EXP_MEAN_44_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000074)
> > +#define RKISP1_CIF_ISP_EXP_SIZE_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x00000004)
> > +#define RKISP1_CIF_ISP_EXP_OFFS_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x00000008)
> > +#define RKISP1_CIF_ISP_EXP_MEAN_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x0000000c)
> >
> > #define RKISP1_CIF_ISP_BLS_BASE 0x00002700
> > #define RKISP1_CIF_ISP_BLS_CTRL (RKISP1_CIF_ISP_BLS_BASE + 0x00000000)
> > @@ -1277,6 +1378,16 @@
> > #define RKISP1_CIF_ISP_WDR_TONECURVE_YM_31_SHD (RKISP1_CIF_ISP_WDR_BASE + 0x0000012C)
> > #define RKISP1_CIF_ISP_WDR_TONECURVE_YM_32_SHD (RKISP1_CIF_ISP_WDR_BASE + 0x00000130)
> >
> > +#define RKISP1_CIF_ISP_HIST_BASE_V12 0x00002C00
> > +#define RKISP1_CIF_ISP_HIST_CTRL_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000000)
> > +#define RKISP1_CIF_ISP_HIST_SIZE_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000004)
> > +#define RKISP1_CIF_ISP_HIST_OFFS_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000008)
> > +#define RKISP1_CIF_ISP_HIST_DBG1_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000000C)
> > +#define RKISP1_CIF_ISP_HIST_DBG2_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000001C)
> > +#define RKISP1_CIF_ISP_HIST_DBG3_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000002C)
> > +#define RKISP1_CIF_ISP_HIST_WEIGHT_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000003C)
> > +#define RKISP1_CIF_ISP_HIST_BIN_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000120)
> > +
> > #define RKISP1_CIF_ISP_VSM_BASE 0x00002F00
> > #define RKISP1_CIF_ISP_VSM_MODE (RKISP1_CIF_ISP_VSM_BASE + 0x00000000)
> > #define RKISP1_CIF_ISP_VSM_H_OFFS (RKISP1_CIF_ISP_VSM_BASE + 0x00000004)
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> > index 3f286c55ad60..dd99d7ea9ff6 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> > @@ -196,6 +196,27 @@ static void rkisp1_stats_get_awb_meas_v10(struct rkisp1_stats *stats,
> > RKISP1_CIF_ISP_AWB_GET_MEAN_Y_G(reg_val);
> > }
> >
> > +static void rkisp1_stats_get_awb_meas_v12(struct rkisp1_stats *stats,
> > + struct rkisp1_stat_buffer *pbuf)
> > +{
> > + /* Protect against concurrent access from ISR? */
> > + struct rkisp1_device *rkisp1 = stats->rkisp1;
> > + u32 reg_val;
> > +
> > + pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AWB;
> > + reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_WHITE_CNT_V12);
> > + pbuf->params.awb.awb_mean[0].cnt =
> > + RKISP1_CIF_ISP_AWB_GET_PIXEL_CNT(reg_val);
> > + reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_MEAN_V12);
> > +
> > + pbuf->params.awb.awb_mean[0].mean_cr_or_r =
> > + RKISP1_CIF_ISP_AWB_GET_MEAN_CR_R(reg_val);
> > + pbuf->params.awb.awb_mean[0].mean_cb_or_b =
> > + RKISP1_CIF_ISP_AWB_GET_MEAN_CB_B(reg_val);
> > + pbuf->params.awb.awb_mean[0].mean_y_or_g =
> > + RKISP1_CIF_ISP_AWB_GET_MEAN_Y_G(reg_val);
> > +}
> > +
> > static void rkisp1_stats_get_aec_meas_v10(struct rkisp1_stats *stats,
> > struct rkisp1_stat_buffer *pbuf)
> > {
> > @@ -209,6 +230,30 @@ static void rkisp1_stats_get_aec_meas_v10(struct rkisp1_stats *stats,
> > RKISP1_CIF_ISP_EXP_MEAN_00_V10 + i * 4);
> > }
> >
> > +static void rkisp1_stats_get_aec_meas_v12(struct rkisp1_stats *stats,
> > + struct rkisp1_stat_buffer *pbuf)
> > +{
> > + struct rkisp1_device *rkisp1 = stats->rkisp1;
> > + u32 value;
> > + int i;
> > +
> > + pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AUTOEXP;
> > + for (i = 0; i < RKISP1_CIF_ISP_AE_MEAN_MAX_V12 / 4; i++) {
> > + value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_EXP_MEAN_V12 + i * 4);
> > + pbuf->params.ae.exp_mean[4 * i + 0] =
> > + RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(value);
> > + pbuf->params.ae.exp_mean[4 * i + 1] =
> > + RKISP1_CIF_ISP_EXP_GET_MEAN_xy1_V12(value);
> > + pbuf->params.ae.exp_mean[4 * i + 2] =
> > + RKISP1_CIF_ISP_EXP_GET_MEAN_xy2_V12(value);
> > + pbuf->params.ae.exp_mean[4 * i + 3] =
> > + RKISP1_CIF_ISP_EXP_GET_MEAN_xy3_V12(value);
> > + }
> > +
> > + value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_EXP_MEAN_V12 + i * 4);
> > + pbuf->params.ae.exp_mean[4 * i + 0] = RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(value);
> > +}
> > +
> > static void rkisp1_stats_get_afc_meas(struct rkisp1_stats *stats,
> > struct rkisp1_stat_buffer *pbuf)
> > {
> > @@ -240,6 +285,23 @@ static void rkisp1_stats_get_hst_meas_v10(struct rkisp1_stats *stats,
> > }
> > }
> >
> > +static void rkisp1_stats_get_hst_meas_v12(struct rkisp1_stats *stats,
> > + struct rkisp1_stat_buffer *pbuf)
> > +{
> > + struct rkisp1_device *rkisp1 = stats->rkisp1;
> > + u32 value;
> > + int i;
> > +
> > + pbuf->meas_type |= RKISP1_CIF_ISP_STAT_HIST;
> > + for (i = 0; i < RKISP1_CIF_ISP_HIST_BIN_N_MAX_V12 / 2; i++) {
> > + value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_HIST_BIN_V12 + i * 4);
> > + pbuf->params.hist.hist_bins[2 * i] =
> > + RKISP1_CIF_ISP_HIST_GET_BIN0_V12(value);
> > + pbuf->params.hist.hist_bins[2 * i + 1] =
> > + RKISP1_CIF_ISP_HIST_GET_BIN1_V12(value);
> > + }
> > +}
> > +
> > static void rkisp1_stats_get_bls_meas(struct rkisp1_stats *stats,
> > struct rkisp1_stat_buffer *pbuf)
> > {
> > @@ -293,6 +355,12 @@ static struct rkisp1_stats_ops rkisp1_v10_stats_ops = {
> > .get_hst_meas = rkisp1_stats_get_hst_meas_v10,
> > };
> >
> > +static struct rkisp1_stats_ops rkisp1_v12_stats_ops = {
> > + .get_awb_meas = rkisp1_stats_get_awb_meas_v12,
> > + .get_aec_meas = rkisp1_stats_get_aec_meas_v12,
> > + .get_hst_meas = rkisp1_stats_get_hst_meas_v12,
> > +};
> > +
> > static void
> > rkisp1_stats_send_measurement(struct rkisp1_stats *stats, u32 isp_ris)
> > {
> > @@ -361,7 +429,10 @@ static void rkisp1_init_stats(struct rkisp1_stats *stats)
> > stats->vdev_fmt.fmt.meta.buffersize =
> > sizeof(struct rkisp1_stat_buffer);
> >
> > - stats->ops = &rkisp1_v10_stats_ops;
> > + if (stats->rkisp1->media_dev.hw_revision == RKISP1_V12)
> > + stats->ops = &rkisp1_v12_stats_ops;
> > + else
> > + stats->ops = &rkisp1_v10_stats_ops;
> > }
> >
> > int rkisp1_stats_register(struct rkisp1_device *rkisp1)
> >
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 6/7] media: rockchip: rkisp1: add support for v12 isp variants
@ 2021-06-15 22:31 ` Heiko Stübner
0 siblings, 0 replies; 38+ messages in thread
From: Heiko Stübner @ 2021-06-15 22:31 UTC (permalink / raw)
To: mchehab, hverkuil-cisco, Dafna Hirschfeld
Cc: ezequiel, helen.koike, Laurent.pinchart, linux-rockchip, linux-media
Am Dienstag, 15. Juni 2021, 08:33:50 CEST schrieb Dafna Hirschfeld:
> Hi,
>
> On 15.06.21 03:37, Heiko Stuebner wrote:
> > From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> >
> > The rkisp1 evolved over soc generations and the rk3326/px30 introduced
> > the so called v12 - probably meaning v1.2.
> >
> > Add the new register definitions.
> >
> > Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> > ---
> > .../platform/rockchip/rkisp1/rkisp1-isp.c | 13 +
> > .../platform/rockchip/rkisp1/rkisp1-params.c | 338 +++++++++++++++++-
> > .../platform/rockchip/rkisp1/rkisp1-regs.h | 111 ++++++
> > .../platform/rockchip/rkisp1/rkisp1-stats.c | 73 +++-
> > 4 files changed, 533 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> > index 1de98e688008..36829e3bdda0 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> > @@ -408,6 +408,10 @@ static int rkisp1_config_mipi(struct rkisp1_device *rkisp1)
> >
> > rkisp1_write(rkisp1, mipi_ctrl, RKISP1_CIF_MIPI_CTRL);
> >
> > + /* V12 could also use a newer csi2-host, but we don't want that yet */
> > + if (rkisp1->media_dev.hw_revision == RKISP1_V12)
> > + rkisp1_write(rkisp1, 0, RKISP1_CIF_ISP_CSI0_CTRL0);
> > +
> > /* Configure Data Type and Virtual Channel */
> > rkisp1_write(rkisp1,
> > RKISP1_CIF_MIPI_DATA_SEL_DT(sink_fmt->mipi_dt) |
> > @@ -527,6 +531,15 @@ static void rkisp1_config_clk(struct rkisp1_device *rkisp1)
> > RKISP1_CIF_ICCL_DCROP_CLK;
> >
> > rkisp1_write(rkisp1, val, RKISP1_CIF_ICCL);
> > +
> > + /* ensure sp and mp can run at the same time in V12 */
> > + if (rkisp1->media_dev.hw_revision == RKISP1_V12) {
> > + val = RKISP1_CIF_CLK_CTRL_MI_Y12 | RKISP1_CIF_CLK_CTRL_MI_SP |
> > + RKISP1_CIF_CLK_CTRL_MI_RAW0 | RKISP1_CIF_CLK_CTRL_MI_RAW1 |
> > + RKISP1_CIF_CLK_CTRL_MI_READ | RKISP1_CIF_CLK_CTRL_MI_RAWRD |
> > + RKISP1_CIF_CLK_CTRL_CP | RKISP1_CIF_CLK_CTRL_IE;
> > + rkisp1_write(rkisp1, val, RKISP1_CIF_VI_ISP_CLK_CTRL_V12);
> > + }
> > }
> >
> > static void rkisp1_isp_start(struct rkisp1_device *rkisp1)
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> > index 427c7cc400b2..0d2b77dd11f5 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
>
> I wonder if we should add two new files 'rkisp1-params-v10.c' 'rkisp1-params-v12.c'
> and move all the callback implementations to those files so not to overload 'rkisp1-params.c'
I'm open to that ;-) ... just wondering if someone else might then
request all back into rkisp1-params.c
Another option would be to just leave it be and wait for what might be
needed for the new rkisp type.
Heiko
>
> Thanks,
> Dafna
>
> > @@ -255,6 +255,78 @@ rkisp1_lsc_matrix_config_v10(struct rkisp1_params *params,
> > RKISP1_CIF_ISP_LSC_TABLE_SEL);
> > }
> >
> > +static void
> > +rkisp1_lsc_matrix_config_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_lsc_config *pconfig)
> > +{
> > + unsigned int isp_lsc_status, sram_addr, isp_lsc_table_sel, i, j, data;
> > +
> > + isp_lsc_status = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_LSC_STATUS);
> > +
> > + /* RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_153 = ( 17 * 18 ) >> 1 */
> > + sram_addr = (isp_lsc_status & RKISP1_CIF_ISP_LSC_ACTIVE_TABLE) ?
> > + RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_0 :
> > + RKISP1_CIF_ISP_LSC_TABLE_ADDRESS_153;
> > + rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_R_TABLE_ADDR);
> > + rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_GR_TABLE_ADDR);
> > + rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_GB_TABLE_ADDR);
> > + rkisp1_write(params->rkisp1, sram_addr, RKISP1_CIF_ISP_LSC_B_TABLE_ADDR);
> > +
> > + /* program data tables (table size is 9 * 17 = 153) */
> > + for (i = 0; i < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; i++) {
> > + /*
> > + * 17 sectors with 2 values in one DWORD = 9
> > + * DWORDs (2nd value of last DWORD unused)
> > + */
> > + for (j = 0; j < RKISP1_CIF_ISP_LSC_SAMPLES_MAX - 1; j += 2) {
> > + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
> > + pconfig->r_data_tbl[i][j],
> > + pconfig->r_data_tbl[i][j + 1]);
> > + rkisp1_write(params->rkisp1, data,
> > + RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
> > +
> > + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
> > + pconfig->gr_data_tbl[i][j],
> > + pconfig->gr_data_tbl[i][j + 1]);
> > + rkisp1_write(params->rkisp1, data,
> > + RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
> > +
> > + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
> > + pconfig->gb_data_tbl[i][j],
> > + pconfig->gb_data_tbl[i][j + 1]);
> > + rkisp1_write(params->rkisp1, data,
> > + RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
> > +
> > + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(
> > + pconfig->b_data_tbl[i][j],
> > + pconfig->b_data_tbl[i][j + 1]);
> > + rkisp1_write(params->rkisp1, data,
> > + RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
> > + }
> > +
> > + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->r_data_tbl[i][j], 0);
> > + rkisp1_write(params->rkisp1, data,
> > + RKISP1_CIF_ISP_LSC_R_TABLE_DATA);
> > +
> > + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->gr_data_tbl[i][j], 0);
> > + rkisp1_write(params->rkisp1, data,
> > + RKISP1_CIF_ISP_LSC_GR_TABLE_DATA);
> > +
> > + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->gb_data_tbl[i][j], 0);
> > + rkisp1_write(params->rkisp1, data,
> > + RKISP1_CIF_ISP_LSC_GB_TABLE_DATA);
> > +
> > + data = RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(pconfig->b_data_tbl[i][j], 0);
> > + rkisp1_write(params->rkisp1, data,
> > + RKISP1_CIF_ISP_LSC_B_TABLE_DATA);
> > + }
> > + isp_lsc_table_sel = (isp_lsc_status & RKISP1_CIF_ISP_LSC_ACTIVE_TABLE) ?
> > + RKISP1_CIF_ISP_LSC_TABLE_0 :
> > + RKISP1_CIF_ISP_LSC_TABLE_1;
> > + rkisp1_write(params->rkisp1, isp_lsc_table_sel,
> > + RKISP1_CIF_ISP_LSC_TABLE_SEL);
> > +}
> > +
> > static void rkisp1_lsc_config(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_lsc_config *arg)
> > {
> > @@ -396,6 +468,25 @@ static void rkisp1_goc_config_v10(struct rkisp1_params *params,
> > RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V10 + i * 4);
> > }
> >
> > +static void rkisp1_goc_config_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_goc_config *arg)
> > +{
> > + unsigned int i;
> > + u32 value;
> > +
> > + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
> > + RKISP1_CIF_ISP_CTRL_ISP_GAMMA_OUT_ENA);
> > + rkisp1_write(params->rkisp1, arg->mode, RKISP1_CIF_ISP_GAMMA_OUT_MODE_V12);
> > +
> > + for (i = 0; i < RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V12 / 2; i++) {
> > + value = RKISP1_CIF_ISP_GAMMA_VALUE_V12(
> > + arg->gamma_y[2 * i + 1],
> > + arg->gamma_y[2 * i]);
> > + rkisp1_write(params->rkisp1, value,
> > + RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V12 + i * 4);
> > + }
> > +}
> > +
> > /* ISP Cross Talk */
> > static void rkisp1_ctk_config(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_ctk_config *arg)
> > @@ -473,6 +564,45 @@ static void rkisp1_awb_meas_config_v10(struct rkisp1_params *params,
> > arg->frames, RKISP1_CIF_ISP_AWB_FRAMES_V10);
> > }
> >
> > +static void rkisp1_awb_meas_config_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_awb_meas_config *arg)
> > +{
> > + u32 reg_val = 0;
> > + /* based on the mode,configure the awb module */
> > + if (arg->awb_mode == RKISP1_CIF_ISP_AWB_MODE_YCBCR) {
> > + /* Reference Cb and Cr */
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_AWB_REF_CR_SET(arg->awb_ref_cr) |
> > + arg->awb_ref_cb, RKISP1_CIF_ISP_AWB_REF_V12);
> > + /* Yc Threshold */
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_AWB_MAX_Y_SET(arg->max_y) |
> > + RKISP1_CIF_ISP_AWB_MIN_Y_SET(arg->min_y) |
> > + RKISP1_CIF_ISP_AWB_MAX_CS_SET(arg->max_csum) |
> > + arg->min_c, RKISP1_CIF_ISP_AWB_THRESH_V12);
> > + }
> > +
> > + reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V12);
> > + if (arg->enable_ymax_cmp)
> > + reg_val |= RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
> > + else
> > + reg_val &= ~RKISP1_CIF_ISP_AWB_YMAX_CMP_EN;
> > + reg_val &= ~RKISP1_CIF_ISP_AWB_SET_FRAMES_MASK_V12;
> > + reg_val |= RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(arg->frames);
> > + rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
> > +
> > + /* window offset */
> > + rkisp1_write(params->rkisp1,
> > + arg->awb_wnd.v_offs << 16 |
> > + arg->awb_wnd.h_offs,
> > + RKISP1_CIF_ISP_AWB_OFFS_V12);
> > + /* AWB window size */
> > + rkisp1_write(params->rkisp1,
> > + arg->awb_wnd.v_size << 16 |
> > + arg->awb_wnd.h_size,
> > + RKISP1_CIF_ISP_AWB_SIZE_V12);
> > +}
> > +
> > static void
> > rkisp1_awb_meas_enable_v10(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_awb_meas_config *arg,
> > @@ -502,6 +632,35 @@ rkisp1_awb_meas_enable_v10(struct rkisp1_params *params,
> > }
> > }
> >
> > +static void
> > +rkisp1_awb_meas_enable_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_awb_meas_config *arg,
> > + bool en)
> > +{
> > + u32 reg_val = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AWB_PROP_V12);
> > +
> > + /* switch off */
> > + reg_val &= RKISP1_CIF_ISP_AWB_MODE_MASK_NONE;
> > +
> > + if (en) {
> > + if (arg->awb_mode == RKISP1_CIF_ISP_AWB_MODE_RGB)
> > + reg_val |= RKISP1_CIF_ISP_AWB_MODE_RGB_EN;
> > + else
> > + reg_val |= RKISP1_CIF_ISP_AWB_MODE_YCBCR_EN;
> > +
> > + rkisp1_write(params->rkisp1, reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
> > +
> > + /* Measurements require AWB block be active. */
> > + rkisp1_param_set_bits(params, RKISP1_CIF_ISP_CTRL,
> > + RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
> > + } else {
> > + rkisp1_write(params->rkisp1,
> > + reg_val, RKISP1_CIF_ISP_AWB_PROP_V12);
> > + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
> > + RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
> > + }
> > +}
> > +
> > static void
> > rkisp1_awb_gain_config_v10(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_awb_gain_config *arg)
> > @@ -515,6 +674,19 @@ rkisp1_awb_gain_config_v10(struct rkisp1_params *params,
> > arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB_V10);
> > }
> >
> > +static void
> > +rkisp1_awb_gain_config_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_awb_gain_config *arg)
> > +{
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_green_r) |
> > + arg->gain_green_b, RKISP1_CIF_ISP_AWB_GAIN_G_V12);
> > +
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_AWB_GAIN_R_SET(arg->gain_red) |
> > + arg->gain_blue, RKISP1_CIF_ISP_AWB_GAIN_RB_V12);
> > +}
> > +
> > static void rkisp1_aec_config_v10(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_aec_config *arg)
> > {
> > @@ -548,6 +720,38 @@ static void rkisp1_aec_config_v10(struct rkisp1_params *params,
> > RKISP1_CIF_ISP_EXP_V_SIZE_V10);
> > }
> >
> > +static void rkisp1_aec_config_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_aec_config *arg)
> > +{
> > + u32 exp_ctrl;
> > + u32 block_hsize, block_vsize;
> > + u32 wnd_num_idx = 1;
> > + const u32 ae_wnd_num[] = { 5, 9, 15, 15 };
> > +
> > + /* avoid to override the old enable value */
> > + exp_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_EXP_CTRL);
> > + exp_ctrl &= RKISP1_CIF_ISP_EXP_ENA;
> > + if (arg->autostop)
> > + exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_AUTOSTOP;
> > + if (arg->mode == RKISP1_CIF_ISP_EXP_MEASURING_MODE_1)
> > + exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_MEASMODE_1;
> > + exp_ctrl |= RKISP1_CIF_ISP_EXP_CTRL_WNDNUM_SET_V12(wnd_num_idx);
> > + rkisp1_write(params->rkisp1, exp_ctrl, RKISP1_CIF_ISP_EXP_CTRL);
> > +
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V12(arg->meas_window.v_offs) |
> > + RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V12(arg->meas_window.h_offs),
> > + RKISP1_CIF_ISP_EXP_OFFS_V12);
> > +
> > + block_hsize = arg->meas_window.h_size / ae_wnd_num[wnd_num_idx] - 1;
> > + block_vsize = arg->meas_window.v_size / ae_wnd_num[wnd_num_idx] - 1;
> > +
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_EXP_V_SIZE_SET_V12(block_vsize) |
> > + RKISP1_CIF_ISP_EXP_H_SIZE_SET_V12(block_hsize),
> > + RKISP1_CIF_ISP_EXP_SIZE_V12);
> > +}
> > +
> > static void rkisp1_cproc_config(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_cproc_config *arg)
> > {
> > @@ -625,6 +829,64 @@ static void rkisp1_hst_config_v10(struct rkisp1_params *params,
> > rkisp1_write(params->rkisp1, weight[0] & 0x1F, RKISP1_CIF_ISP_HIST_WEIGHT_44_V10);
> > }
> >
> > +static void rkisp1_hst_config_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_hst_config *arg)
> > +{
> > + unsigned int i, j;
> > + u32 block_hsize, block_vsize;
> > + u32 wnd_num_idx, hist_weight_num, hist_ctrl, value;
> > + u8 weight15x15[RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12];
> > + const u32 hist_wnd_num[] = { 5, 9, 15, 15 };
> > +
> > + /* now we just support 9x9 window */
> > + wnd_num_idx = 1;
> > + memset(weight15x15, 0x00, sizeof(weight15x15));
> > + /* avoid to override the old enable value */
> > + hist_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_HIST_CTRL_V12);
> > + hist_ctrl &= RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 |
> > + RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12;
> > + hist_ctrl = hist_ctrl |
> > + RKISP1_CIF_ISP_HIST_CTRL_INTRSEL_SET_V12(1) |
> > + RKISP1_CIF_ISP_HIST_CTRL_DATASEL_SET_V12(0) |
> > + RKISP1_CIF_ISP_HIST_CTRL_WATERLINE_SET_V12(0) |
> > + RKISP1_CIF_ISP_HIST_CTRL_AUTOSTOP_SET_V12(0) |
> > + RKISP1_CIF_ISP_HIST_CTRL_WNDNUM_SET_V12(1) |
> > + RKISP1_CIF_ISP_HIST_CTRL_STEPSIZE_SET_V12(arg->histogram_predivider);
> > + rkisp1_write(params->rkisp1, hist_ctrl, RKISP1_CIF_ISP_HIST_CTRL_V12);
> > +
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_HIST_OFFS_SET_V12(arg->meas_window.h_offs,
> > + arg->meas_window.v_offs),
> > + RKISP1_CIF_ISP_HIST_OFFS_V12);
> > +
> > + block_hsize = arg->meas_window.h_size / hist_wnd_num[wnd_num_idx] - 1;
> > + block_vsize = arg->meas_window.v_size / hist_wnd_num[wnd_num_idx] - 1;
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_HIST_SIZE_SET_V12(block_hsize, block_vsize),
> > + RKISP1_CIF_ISP_HIST_SIZE_V12);
> > +
> > + for (i = 0; i < hist_wnd_num[wnd_num_idx]; i++) {
> > + for (j = 0; j < hist_wnd_num[wnd_num_idx]; j++) {
> > + weight15x15[i * RKISP1_CIF_ISP_HIST_ROW_NUM_V12 + j] =
> > + arg->hist_weight[i * hist_wnd_num[wnd_num_idx] + j];
> > + }
> > + }
> > +
> > + hist_weight_num = RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12;
> > + for (i = 0; i < (hist_weight_num / 4); i++) {
> > + value = RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(
> > + weight15x15[4 * i + 0],
> > + weight15x15[4 * i + 1],
> > + weight15x15[4 * i + 2],
> > + weight15x15[4 * i + 3]);
> > + rkisp1_write(params->rkisp1, value,
> > + RKISP1_CIF_ISP_HIST_WEIGHT_V12 + 4 * i);
> > + }
> > + value = RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(weight15x15[4 * i + 0], 0, 0, 0);
> > + rkisp1_write(params->rkisp1, value,
> > + RKISP1_CIF_ISP_HIST_WEIGHT_V12 + 4 * i);
> > +}
> > +
> > static void
> > rkisp1_hst_enable_v10(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_hst_config *arg, bool en)
> > @@ -643,6 +905,26 @@ rkisp1_hst_enable_v10(struct rkisp1_params *params,
> > }
> > }
> >
> > +static void
> > +rkisp1_hst_enable_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_hst_config *arg, bool en)
> > +{
> > + if (en) {
> > + u32 hist_ctrl = rkisp1_read(params->rkisp1,
> > + RKISP1_CIF_ISP_HIST_CTRL_V12);
> > +
> > + hist_ctrl &= ~RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12;
> > + hist_ctrl |= RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(arg->mode);
> > + hist_ctrl |= RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(1);
> > + rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_CTRL_V12,
> > + hist_ctrl);
> > + } else {
> > + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_HIST_CTRL_V12,
> > + RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 |
> > + RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12);
> > + }
> > +}
> > +
> > static void rkisp1_afm_config_v10(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_afc_config *arg)
> > {
> > @@ -674,6 +956,45 @@ static void rkisp1_afm_config_v10(struct rkisp1_params *params,
> > rkisp1_write(params->rkisp1, afm_ctrl, RKISP1_CIF_ISP_AFM_CTRL);
> > }
> >
> > +static void rkisp1_afm_config_v12(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_afc_config *arg)
> > +{
> > + size_t num_of_win = min_t(size_t, ARRAY_SIZE(arg->afm_win),
> > + arg->num_afm_win);
> > + u32 afm_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_AFM_CTRL);
> > + u32 lum_var_shift, afm_var_shift;
> > + unsigned int i;
> > +
> > + /* Switch off to configure. */
> > + rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
> > + RKISP1_CIF_ISP_AFM_ENA);
> > +
> > + for (i = 0; i < num_of_win; i++) {
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_AFM_WINDOW_X(arg->afm_win[i].h_offs) |
> > + RKISP1_CIF_ISP_AFM_WINDOW_Y(arg->afm_win[i].v_offs),
> > + RKISP1_CIF_ISP_AFM_LT_A + i * 8);
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_AFM_WINDOW_X(arg->afm_win[i].h_size +
> > + arg->afm_win[i].h_offs) |
> > + RKISP1_CIF_ISP_AFM_WINDOW_Y(arg->afm_win[i].v_size +
> > + arg->afm_win[i].v_offs),
> > + RKISP1_CIF_ISP_AFM_RB_A + i * 8);
> > + }
> > + rkisp1_write(params->rkisp1, arg->thres, RKISP1_CIF_ISP_AFM_THRES);
> > +
> > + lum_var_shift = RKISP1_CIF_ISP_AFM_GET_LUM_SHIFT_a_V12(arg->var_shift);
> > + afm_var_shift = RKISP1_CIF_ISP_AFM_GET_AFM_SHIFT_a_V12(arg->var_shift);
> > + rkisp1_write(params->rkisp1,
> > + RKISP1_CIF_ISP_AFM_SET_SHIFT_a_V12(lum_var_shift, afm_var_shift) |
> > + RKISP1_CIF_ISP_AFM_SET_SHIFT_b_V12(lum_var_shift, afm_var_shift) |
> > + RKISP1_CIF_ISP_AFM_SET_SHIFT_c_V12(lum_var_shift, afm_var_shift),
> > + RKISP1_CIF_ISP_AFM_VAR_SHIFT);
> > +
> > + /* restore afm status */
> > + rkisp1_write(params->rkisp1, afm_ctrl, RKISP1_CIF_ISP_AFM_CTRL);
> > +}
> > +
> > static void rkisp1_ie_config(struct rkisp1_params *params,
> > const struct rkisp1_cif_isp_ie_config *arg)
> > {
> > @@ -1305,6 +1626,18 @@ static struct rkisp1_params_ops rkisp1_v10_params_ops = {
> > .afm_config = rkisp1_afm_config_v10,
> > };
> >
> > +static struct rkisp1_params_ops rkisp1_v12_params_ops = {
> > + .lsc_matrix_config = rkisp1_lsc_matrix_config_v12,
> > + .goc_config = rkisp1_goc_config_v12,
> > + .awb_meas_config = rkisp1_awb_meas_config_v12,
> > + .awb_meas_enable = rkisp1_awb_meas_enable_v12,
> > + .awb_gain_config = rkisp1_awb_gain_config_v12,
> > + .aec_config = rkisp1_aec_config_v12,
> > + .hst_config = rkisp1_hst_config_v12,
> > + .hst_enable = rkisp1_hst_enable_v12,
> > + .afm_config = rkisp1_afm_config_v12,
> > +};
> > +
> > static int rkisp1_params_enum_fmt_meta_out(struct file *file, void *priv,
> > struct v4l2_fmtdesc *f)
> > {
> > @@ -1472,7 +1805,10 @@ static void rkisp1_init_params(struct rkisp1_params *params)
> > params->vdev_fmt.fmt.meta.buffersize =
> > sizeof(struct rkisp1_params_cfg);
> >
> > - params->ops = &rkisp1_v10_params_ops;
> > + if (params->rkisp1->media_dev.hw_revision == RKISP1_V12)
> > + params->ops = &rkisp1_v12_params_ops;
> > + else
> > + params->ops = &rkisp1_v10_params_ops;
> > }
> >
> > int rkisp1_params_register(struct rkisp1_device *rkisp1)
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> > index c71ccd148bde..d326214c7e07 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-regs.h
> > @@ -396,6 +396,38 @@
> > #define RKISP1_CIF_ISP_HIST_COLUMN_NUM_V10 5
> > #define RKISP1_CIF_ISP_HIST_GET_BIN_V10(x) ((x) & 0x000FFFFF)
> >
> > +/* ISP HISTOGRAM CALCULATION : CIF_ISP_HIST */
> > +#define RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(x) (((x) & 0x01) << 0)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_EN_MASK_V12 RKISP1_CIF_ISP_HIST_CTRL_EN_SET_V12(0x01)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_STEPSIZE_SET_V12(x) (((x) & 0x7F) << 1)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(x) (((x) & 0x07) << 8)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_MODE_MASK_V12 RKISP1_CIF_ISP_HIST_CTRL_MODE_SET_V12(0x07)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_AUTOSTOP_SET_V12(x) (((x) & 0x01) << 11)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_WATERLINE_SET_V12(x) (((x) & 0xFFF) << 12)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_DATASEL_SET_V12(x) (((x) & 0x07) << 24)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_INTRSEL_SET_V12(x) (((x) & 0x01) << 27)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_WNDNUM_SET_V12(x) (((x) & 0x03) << 28)
> > +#define RKISP1_CIF_ISP_HIST_CTRL_DBGEN_SET_V12(x) (((x) & 0x01) << 30)
> > +#define RKISP1_CIF_ISP_HIST_ROW_NUM_V12 15
> > +#define RKISP1_CIF_ISP_HIST_COLUMN_NUM_V12 15
> > +#define RKISP1_CIF_ISP_HIST_WEIGHT_REG_SIZE_V12 \
> > + (RKISP1_CIF_ISP_HIST_ROW_NUM_V12 * RKISP1_CIF_ISP_HIST_COLUMN_NUM_V12)
> > +
> > +#define RKISP1_CIF_ISP_HIST_WEIGHT_SET_V12(v0, v1, v2, v3) \
> > + (((v0) & 0x3F) | (((v1) & 0x3F) << 8) |\
> > + (((v2) & 0x3F) << 16) |\
> > + (((v3) & 0x3F) << 24))
> > +
> > +#define RKISP1_CIF_ISP_HIST_OFFS_SET_V12(v0, v1) \
> > + (((v0) & 0x1FFF) | (((v1) & 0x1FFF) << 16))
> > +#define RKISP1_CIF_ISP_HIST_SIZE_SET_V12(v0, v1) \
> > + (((v0) & 0x7FF) | (((v1) & 0x7FF) << 16))
> > +
> > +#define RKISP1_CIF_ISP_HIST_GET_BIN0_V12(x) \
> > + ((x) & 0xFFFF)
> > +#define RKISP1_CIF_ISP_HIST_GET_BIN1_V12(x) \
> > + (((x) >> 16) & 0xFFFF)
> > +
> > /* AUTO FOCUS MEASUREMENT: ISP_AFM_CTRL */
> > #define RKISP1_ISP_AFM_CTRL_ENABLE BIT(0)
> >
> > @@ -430,6 +462,8 @@
> > #define RKISP1_CIF_ISP_AWB_MODE_YCBCR_EN ((0 << 31) | (0x2 << 0))
> > #define RKISP1_CIF_ISP_AWB_MODE_MASK_NONE 0xFFFFFFFC
> > #define RKISP1_CIF_ISP_AWB_MODE_READ(x) ((x) & 3)
> > +#define RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(x) (((x) & 0x07) << 28)
> > +#define RKISP1_CIF_ISP_AWB_SET_FRAMES_MASK_V12 RKISP1_CIF_ISP_AWB_SET_FRAMES_V12(0x07)
> > /* ISP_AWB_GAIN_RB, ISP_AWB_GAIN_G */
> > #define RKISP1_CIF_ISP_AWB_GAIN_R_SET(x) (((x) & 0x3FF) << 16)
> > #define RKISP1_CIF_ISP_AWB_GAIN_R_READ(x) (((x) >> 16) & 0x3FF)
> > @@ -464,6 +498,7 @@
> > /* ISP_EXP_CTRL */
> > #define RKISP1_CIF_ISP_EXP_ENA BIT(0)
> > #define RKISP1_CIF_ISP_EXP_CTRL_AUTOSTOP BIT(1)
> > +#define RKISP1_CIF_ISP_EXP_CTRL_WNDNUM_SET_V12(x) (((x) & 0x03) << 2)
> > /*
> > *'1' luminance calculation according to Y=(R+G+B) x 0.332 (85/256)
> > *'0' luminance calculation according to Y=16+0.25R+0.5G+0.1094B
> > @@ -473,15 +508,22 @@
> > /* ISP_EXP_H_SIZE */
> > #define RKISP1_CIF_ISP_EXP_H_SIZE_SET_V10(x) ((x) & 0x7FF)
> > #define RKISP1_CIF_ISP_EXP_HEIGHT_MASK_V10 0x000007FF
> > +#define RKISP1_CIF_ISP_EXP_H_SIZE_SET_V12(x) ((x) & 0x7FF)
> > +#define RKISP1_CIF_ISP_EXP_HEIGHT_MASK_V12 0x000007FF
> > /* ISP_EXP_V_SIZE : vertical size must be a multiple of 2). */
> > #define RKISP1_CIF_ISP_EXP_V_SIZE_SET_V10(x) ((x) & 0x7FE)
> > +#define RKISP1_CIF_ISP_EXP_V_SIZE_SET_V12(x) (((x) & 0x7FE) << 16)
> >
> > /* ISP_EXP_H_OFFSET */
> > #define RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V10(x) ((x) & 0x1FFF)
> > #define RKISP1_CIF_ISP_EXP_MAX_HOFFS_V10 2424
> > +#define RKISP1_CIF_ISP_EXP_H_OFFSET_SET_V12(x) ((x) & 0x1FFF)
> > +#define RKISP1_CIF_ISP_EXP_MAX_HOFFS_V12 0x1FFF
> > /* ISP_EXP_V_OFFSET */
> > #define RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V10(x) ((x) & 0x1FFF)
> > #define RKISP1_CIF_ISP_EXP_MAX_VOFFS_V10 1806
> > +#define RKISP1_CIF_ISP_EXP_V_OFFSET_SET_V12(x) (((x) & 0x1FFF) << 16)
> > +#define RKISP1_CIF_ISP_EXP_MAX_VOFFS_V12 0x1FFF
> >
> > #define RKISP1_CIF_ISP_EXP_ROW_NUM_V10 5
> > #define RKISP1_CIF_ISP_EXP_COLUMN_NUM_V10 5
> > @@ -500,13 +542,40 @@
> > #define RKISP1_CIF_ISP_EXP_MIN_VSIZE_V10 \
> > (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V10 * RKISP1_CIF_ISP_EXP_ROW_NUM_V10 + 1)
> >
> > +#define RKISP1_CIF_ISP_EXP_ROW_NUM_V12 15
> > +#define RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 15
> > +#define RKISP1_CIF_ISP_EXP_NUM_LUMA_REGS_V12 \
> > + (RKISP1_CIF_ISP_EXP_ROW_NUM_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12)
> > +
> > +#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V12 0x7FF
> > +#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V12 0xE
> > +#define RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V12 0x7FE
> > +#define RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V12 0xE
> > +#define RKISP1_CIF_ISP_EXP_MAX_HSIZE_V12 \
> > + (RKISP1_CIF_ISP_EXP_BLOCK_MAX_HSIZE_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 + 1)
> > +#define RKISP1_CIF_ISP_EXP_MIN_HSIZE_V12 \
> > + (RKISP1_CIF_ISP_EXP_BLOCK_MIN_HSIZE_V12 * RKISP1_CIF_ISP_EXP_COLUMN_NUM_V12 + 1)
> > +#define RKISP1_CIF_ISP_EXP_MAX_VSIZE_V12 \
> > + (RKISP1_CIF_ISP_EXP_BLOCK_MAX_VSIZE_V12 * RKISP1_CIF_ISP_EXP_ROW_NUM_V12 + 1)
> > +#define RKISP1_CIF_ISP_EXP_MIN_VSIZE_V12 \
> > + (RKISP1_CIF_ISP_EXP_BLOCK_MIN_VSIZE_V12 * RKISP1_CIF_ISP_EXP_ROW_NUM_V12 + 1)
> > +
> > +#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(x) ((x) & 0xFF)
> > +#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy1_V12(x) (((x) >> 8) & 0xFF)
> > +#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy2_V12(x) (((x) >> 16) & 0xFF)
> > +#define RKISP1_CIF_ISP_EXP_GET_MEAN_xy3_V12(x) (((x) >> 24) & 0xFF)
> > +
> > /* LSC: ISP_LSC_CTRL */
> > #define RKISP1_CIF_ISP_LSC_CTRL_ENA BIT(0)
> > #define RKISP1_CIF_ISP_LSC_SECT_SIZE_RESERVED 0xFC00FC00
> > #define RKISP1_CIF_ISP_LSC_GRAD_RESERVED_V10 0xF000F000
> > #define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED_V10 0xF000F000
> > +#define RKISP1_CIF_ISP_LSC_GRAD_RESERVED_V12 0xE000E000
> > +#define RKISP1_CIF_ISP_LSC_SAMPLE_RESERVED_V12 0xE000E000
> > #define RKISP1_CIF_ISP_LSC_TABLE_DATA_V10(v0, v1) \
> > (((v0) & 0xFFF) | (((v1) & 0xFFF) << 12))
> > +#define RKISP1_CIF_ISP_LSC_TABLE_DATA_V12(v0, v1) \
> > + (((v0) & 0x1FFF) | (((v1) & 0x1FFF) << 13))
> > #define RKISP1_CIF_ISP_LSC_SECT_SIZE(v0, v1) \
> > (((v0) & 0xFFF) | (((v1) & 0xFFF) << 16))
> > #define RKISP1_CIF_ISP_LSC_GRAD_SIZE(v0, v1) \
> > @@ -579,6 +648,10 @@
> > (1 << 15) | (1 << 11) | (1 << 7) | (1 << 3))
> > #define RKISP1_CIFISP_DEGAMMA_Y_RESERVED 0xFFFFF000
> >
> > +/* GAMMA-OUT */
> > +#define RKISP1_CIF_ISP_GAMMA_VALUE_V12(x, y) \
> > + (((x) & 0xFFF) << 16 | ((y) & 0xFFF) << 0)
> > +
> > /* AFM */
> > #define RKISP1_CIF_ISP_AFM_ENA BIT(0)
> > #define RKISP1_CIF_ISP_AFM_THRES_RESERVED 0xFFFF0000
> > @@ -589,6 +662,11 @@
> > #define RKISP1_CIF_ISP_AFM_WINDOW_Y_MIN 0x2
> > #define RKISP1_CIF_ISP_AFM_WINDOW_X(x) (((x) & 0x1FFF) << 16)
> > #define RKISP1_CIF_ISP_AFM_WINDOW_Y(x) ((x) & 0x1FFF)
> > +#define RKISP1_CIF_ISP_AFM_SET_SHIFT_a_V12(x, y) (((x) & 0x7) << 16 | ((y) & 0x7) << 0)
> > +#define RKISP1_CIF_ISP_AFM_SET_SHIFT_b_V12(x, y) (((x) & 0x7) << 20 | ((y) & 0x7) << 4)
> > +#define RKISP1_CIF_ISP_AFM_SET_SHIFT_c_V12(x, y) (((x) & 0x7) << 24 | ((y) & 0x7) << 8)
> > +#define RKISP1_CIF_ISP_AFM_GET_LUM_SHIFT_a_V12(x) (((x) & 0x70000) >> 16)
> > +#define RKISP1_CIF_ISP_AFM_GET_AFM_SHIFT_a_V12(x) ((x) & 0x7)
> >
> > /* DPF */
> > #define RKISP1_CIF_ISP_DPF_MODE_EN BIT(0)
> > @@ -611,6 +689,7 @@
> > #define RKISP1_CIF_CTRL_BASE 0x00000000
> > #define RKISP1_CIF_CCL (RKISP1_CIF_CTRL_BASE + 0x00000000)
> > #define RKISP1_CIF_VI_ID (RKISP1_CIF_CTRL_BASE + 0x00000008)
> > +#define RKISP1_CIF_VI_ISP_CLK_CTRL_V12 (RKISP1_CIF_CTRL_BASE + 0x0000000C)
> > #define RKISP1_CIF_ICCL (RKISP1_CIF_CTRL_BASE + 0x00000010)
> > #define RKISP1_CIF_IRCL (RKISP1_CIF_CTRL_BASE + 0x00000014)
> > #define RKISP1_CIF_VI_DPCL (RKISP1_CIF_CTRL_BASE + 0x00000018)
> > @@ -708,6 +787,23 @@
> > #define RKISP1_CIF_ISP_AWB_GAIN_RB_V10 (RKISP1_CIF_ISP_BASE + 0x0000013C)
> > #define RKISP1_CIF_ISP_AWB_WHITE_CNT_V10 (RKISP1_CIF_ISP_BASE + 0x00000140)
> > #define RKISP1_CIF_ISP_AWB_MEAN_V10 (RKISP1_CIF_ISP_BASE + 0x00000144)
> > +#define RKISP1_CIF_ISP_AWB_PROP_V12 (RKISP1_CIF_ISP_BASE + 0x00000110)
> > +#define RKISP1_CIF_ISP_AWB_SIZE_V12 (RKISP1_CIF_ISP_BASE + 0x00000114)
> > +#define RKISP1_CIF_ISP_AWB_OFFS_V12 (RKISP1_CIF_ISP_BASE + 0x00000118)
> > +#define RKISP1_CIF_ISP_AWB_REF_V12 (RKISP1_CIF_ISP_BASE + 0x0000011C)
> > +#define RKISP1_CIF_ISP_AWB_THRESH_V12 (RKISP1_CIF_ISP_BASE + 0x00000120)
> > +#define RKISP1_CIF_ISP_X_COOR12_V12 (RKISP1_CIF_ISP_BASE + 0x00000124)
> > +#define RKISP1_CIF_ISP_X_COOR34_V12 (RKISP1_CIF_ISP_BASE + 0x00000128)
> > +#define RKISP1_CIF_ISP_AWB_WHITE_CNT_V12 (RKISP1_CIF_ISP_BASE + 0x0000012C)
> > +#define RKISP1_CIF_ISP_AWB_MEAN_V12 (RKISP1_CIF_ISP_BASE + 0x00000130)
> > +#define RKISP1_CIF_ISP_DEGAIN_V12 (RKISP1_CIF_ISP_BASE + 0x00000134)
> > +#define RKISP1_CIF_ISP_AWB_GAIN_G_V12 (RKISP1_CIF_ISP_BASE + 0x00000138)
> > +#define RKISP1_CIF_ISP_AWB_GAIN_RB_V12 (RKISP1_CIF_ISP_BASE + 0x0000013C)
> > +#define RKISP1_CIF_ISP_REGION_LINE_V12 (RKISP1_CIF_ISP_BASE + 0x00000140)
> > +#define RKISP1_CIF_ISP_WP_CNT_REGION0_V12 (RKISP1_CIF_ISP_BASE + 0x00000160)
> > +#define RKISP1_CIF_ISP_WP_CNT_REGION1_V12 (RKISP1_CIF_ISP_BASE + 0x00000164)
> > +#define RKISP1_CIF_ISP_WP_CNT_REGION2_V12 (RKISP1_CIF_ISP_BASE + 0x00000168)
> > +#define RKISP1_CIF_ISP_WP_CNT_REGION3_V12 (RKISP1_CIF_ISP_BASE + 0x0000016C)
> > #define RKISP1_CIF_ISP_CC_COEFF_0 (RKISP1_CIF_ISP_BASE + 0x00000170)
> > #define RKISP1_CIF_ISP_CC_COEFF_1 (RKISP1_CIF_ISP_BASE + 0x00000174)
> > #define RKISP1_CIF_ISP_CC_COEFF_2 (RKISP1_CIF_ISP_BASE + 0x00000178)
> > @@ -765,6 +861,8 @@
> > #define RKISP1_CIF_ISP_CT_OFFSET_R (RKISP1_CIF_ISP_BASE + 0x00000248)
> > #define RKISP1_CIF_ISP_CT_OFFSET_G (RKISP1_CIF_ISP_BASE + 0x0000024C)
> > #define RKISP1_CIF_ISP_CT_OFFSET_B (RKISP1_CIF_ISP_BASE + 0x00000250)
> > +#define RKISP1_CIF_ISP_GAMMA_OUT_MODE_V12 (RKISP1_CIF_ISP_BASE + 0x00000300)
> > +#define RKISP1_CIF_ISP_GAMMA_OUT_Y_0_V12 (RKISP1_CIF_ISP_BASE + 0x00000304)
> >
> > #define RKISP1_CIF_ISP_FLASH_BASE 0x00000660
> > #define RKISP1_CIF_ISP_FLASH_CMD (RKISP1_CIF_ISP_FLASH_BASE + 0x00000000)
> > @@ -1117,6 +1215,9 @@
> > #define RKISP1_CIF_ISP_EXP_MEAN_24_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x0000006c)
> > #define RKISP1_CIF_ISP_EXP_MEAN_34_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000070)
> > #define RKISP1_CIF_ISP_EXP_MEAN_44_V10 (RKISP1_CIF_ISP_EXP_BASE + 0x00000074)
> > +#define RKISP1_CIF_ISP_EXP_SIZE_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x00000004)
> > +#define RKISP1_CIF_ISP_EXP_OFFS_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x00000008)
> > +#define RKISP1_CIF_ISP_EXP_MEAN_V12 (RKISP1_CIF_ISP_EXP_BASE + 0x0000000c)
> >
> > #define RKISP1_CIF_ISP_BLS_BASE 0x00002700
> > #define RKISP1_CIF_ISP_BLS_CTRL (RKISP1_CIF_ISP_BLS_BASE + 0x00000000)
> > @@ -1277,6 +1378,16 @@
> > #define RKISP1_CIF_ISP_WDR_TONECURVE_YM_31_SHD (RKISP1_CIF_ISP_WDR_BASE + 0x0000012C)
> > #define RKISP1_CIF_ISP_WDR_TONECURVE_YM_32_SHD (RKISP1_CIF_ISP_WDR_BASE + 0x00000130)
> >
> > +#define RKISP1_CIF_ISP_HIST_BASE_V12 0x00002C00
> > +#define RKISP1_CIF_ISP_HIST_CTRL_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000000)
> > +#define RKISP1_CIF_ISP_HIST_SIZE_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000004)
> > +#define RKISP1_CIF_ISP_HIST_OFFS_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000008)
> > +#define RKISP1_CIF_ISP_HIST_DBG1_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000000C)
> > +#define RKISP1_CIF_ISP_HIST_DBG2_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000001C)
> > +#define RKISP1_CIF_ISP_HIST_DBG3_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000002C)
> > +#define RKISP1_CIF_ISP_HIST_WEIGHT_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x0000003C)
> > +#define RKISP1_CIF_ISP_HIST_BIN_V12 (RKISP1_CIF_ISP_HIST_BASE_V12 + 0x00000120)
> > +
> > #define RKISP1_CIF_ISP_VSM_BASE 0x00002F00
> > #define RKISP1_CIF_ISP_VSM_MODE (RKISP1_CIF_ISP_VSM_BASE + 0x00000000)
> > #define RKISP1_CIF_ISP_VSM_H_OFFS (RKISP1_CIF_ISP_VSM_BASE + 0x00000004)
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> > index 3f286c55ad60..dd99d7ea9ff6 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
> > @@ -196,6 +196,27 @@ static void rkisp1_stats_get_awb_meas_v10(struct rkisp1_stats *stats,
> > RKISP1_CIF_ISP_AWB_GET_MEAN_Y_G(reg_val);
> > }
> >
> > +static void rkisp1_stats_get_awb_meas_v12(struct rkisp1_stats *stats,
> > + struct rkisp1_stat_buffer *pbuf)
> > +{
> > + /* Protect against concurrent access from ISR? */
> > + struct rkisp1_device *rkisp1 = stats->rkisp1;
> > + u32 reg_val;
> > +
> > + pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AWB;
> > + reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_WHITE_CNT_V12);
> > + pbuf->params.awb.awb_mean[0].cnt =
> > + RKISP1_CIF_ISP_AWB_GET_PIXEL_CNT(reg_val);
> > + reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_AWB_MEAN_V12);
> > +
> > + pbuf->params.awb.awb_mean[0].mean_cr_or_r =
> > + RKISP1_CIF_ISP_AWB_GET_MEAN_CR_R(reg_val);
> > + pbuf->params.awb.awb_mean[0].mean_cb_or_b =
> > + RKISP1_CIF_ISP_AWB_GET_MEAN_CB_B(reg_val);
> > + pbuf->params.awb.awb_mean[0].mean_y_or_g =
> > + RKISP1_CIF_ISP_AWB_GET_MEAN_Y_G(reg_val);
> > +}
> > +
> > static void rkisp1_stats_get_aec_meas_v10(struct rkisp1_stats *stats,
> > struct rkisp1_stat_buffer *pbuf)
> > {
> > @@ -209,6 +230,30 @@ static void rkisp1_stats_get_aec_meas_v10(struct rkisp1_stats *stats,
> > RKISP1_CIF_ISP_EXP_MEAN_00_V10 + i * 4);
> > }
> >
> > +static void rkisp1_stats_get_aec_meas_v12(struct rkisp1_stats *stats,
> > + struct rkisp1_stat_buffer *pbuf)
> > +{
> > + struct rkisp1_device *rkisp1 = stats->rkisp1;
> > + u32 value;
> > + int i;
> > +
> > + pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AUTOEXP;
> > + for (i = 0; i < RKISP1_CIF_ISP_AE_MEAN_MAX_V12 / 4; i++) {
> > + value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_EXP_MEAN_V12 + i * 4);
> > + pbuf->params.ae.exp_mean[4 * i + 0] =
> > + RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(value);
> > + pbuf->params.ae.exp_mean[4 * i + 1] =
> > + RKISP1_CIF_ISP_EXP_GET_MEAN_xy1_V12(value);
> > + pbuf->params.ae.exp_mean[4 * i + 2] =
> > + RKISP1_CIF_ISP_EXP_GET_MEAN_xy2_V12(value);
> > + pbuf->params.ae.exp_mean[4 * i + 3] =
> > + RKISP1_CIF_ISP_EXP_GET_MEAN_xy3_V12(value);
> > + }
> > +
> > + value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_EXP_MEAN_V12 + i * 4);
> > + pbuf->params.ae.exp_mean[4 * i + 0] = RKISP1_CIF_ISP_EXP_GET_MEAN_xy0_V12(value);
> > +}
> > +
> > static void rkisp1_stats_get_afc_meas(struct rkisp1_stats *stats,
> > struct rkisp1_stat_buffer *pbuf)
> > {
> > @@ -240,6 +285,23 @@ static void rkisp1_stats_get_hst_meas_v10(struct rkisp1_stats *stats,
> > }
> > }
> >
> > +static void rkisp1_stats_get_hst_meas_v12(struct rkisp1_stats *stats,
> > + struct rkisp1_stat_buffer *pbuf)
> > +{
> > + struct rkisp1_device *rkisp1 = stats->rkisp1;
> > + u32 value;
> > + int i;
> > +
> > + pbuf->meas_type |= RKISP1_CIF_ISP_STAT_HIST;
> > + for (i = 0; i < RKISP1_CIF_ISP_HIST_BIN_N_MAX_V12 / 2; i++) {
> > + value = rkisp1_read(rkisp1, RKISP1_CIF_ISP_HIST_BIN_V12 + i * 4);
> > + pbuf->params.hist.hist_bins[2 * i] =
> > + RKISP1_CIF_ISP_HIST_GET_BIN0_V12(value);
> > + pbuf->params.hist.hist_bins[2 * i + 1] =
> > + RKISP1_CIF_ISP_HIST_GET_BIN1_V12(value);
> > + }
> > +}
> > +
> > static void rkisp1_stats_get_bls_meas(struct rkisp1_stats *stats,
> > struct rkisp1_stat_buffer *pbuf)
> > {
> > @@ -293,6 +355,12 @@ static struct rkisp1_stats_ops rkisp1_v10_stats_ops = {
> > .get_hst_meas = rkisp1_stats_get_hst_meas_v10,
> > };
> >
> > +static struct rkisp1_stats_ops rkisp1_v12_stats_ops = {
> > + .get_awb_meas = rkisp1_stats_get_awb_meas_v12,
> > + .get_aec_meas = rkisp1_stats_get_aec_meas_v12,
> > + .get_hst_meas = rkisp1_stats_get_hst_meas_v12,
> > +};
> > +
> > static void
> > rkisp1_stats_send_measurement(struct rkisp1_stats *stats, u32 isp_ris)
> > {
> > @@ -361,7 +429,10 @@ static void rkisp1_init_stats(struct rkisp1_stats *stats)
> > stats->vdev_fmt.fmt.meta.buffersize =
> > sizeof(struct rkisp1_stat_buffer);
> >
> > - stats->ops = &rkisp1_v10_stats_ops;
> > + if (stats->rkisp1->media_dev.hw_revision == RKISP1_V12)
> > + stats->ops = &rkisp1_v12_stats_ops;
> > + else
> > + stats->ops = &rkisp1_v10_stats_ops;
> > }
> >
> > int rkisp1_stats_register(struct rkisp1_device *rkisp1)
> >
>
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 3/7] media: rockchip: rkisp1: make some isp-param functions variable
2021-06-15 5:53 ` Dafna Hirschfeld
@ 2021-06-15 22:44 ` Heiko Stübner
-1 siblings, 0 replies; 38+ messages in thread
From: Heiko Stübner @ 2021-06-15 22:44 UTC (permalink / raw)
To: mchehab, hverkuil-cisco, Dafna Hirschfeld
Cc: ezequiel, helen.koike, Laurent.pinchart, linux-rockchip, linux-media
Am Dienstag, 15. Juni 2021, 07:53:19 CEST schrieb Dafna Hirschfeld:
> Hi,
>
> On 15.06.21 03:37, Heiko Stuebner wrote:
> > From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> >
> > The isp block evolved in subsequent socs, so some functions
> > will behave differently on newer variants.
> >
> > Therefore make it possible to override the needed params functions.
> >
> > Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> > ---
> > .../platform/rockchip/rkisp1/rkisp1-common.h | 25 ++++++++
> > .../platform/rockchip/rkisp1/rkisp1-params.c | 64 ++++++++++++-------
> > 2 files changed, 65 insertions(+), 24 deletions(-)
> >
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> > index 25dd5c93620e..74ddd8256366 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> > @@ -254,11 +254,35 @@ struct rkisp1_stats {
> > struct v4l2_format vdev_fmt;
> > };
> >
> > +struct rkisp1_params;
> > +struct rkisp1_params_ops {
> > + void (*lsc_matrix_config)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_lsc_config *pconfig);
> > + void (*goc_config)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_goc_config *arg);
> > + void (*awb_meas_config)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_awb_meas_config *arg);
> > + void (*awb_meas_enable)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_awb_meas_config *arg,
> > + bool en);
> > + void (*awb_gain_config)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_awb_gain_config *arg);
> > + void (*aec_config)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_aec_config *arg);
> > + void (*hst_config)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_hst_config *arg);
> > + void (*hst_enable)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_hst_config *arg, bool en);
> > + void (*afm_config)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_afc_config *arg);
> > +};
> > +
> > /*
> > * struct rkisp1_params - ISP input parameters device
> > *
> > * @vnode: video node
> > * @rkisp1: pointer to the rkisp1 device
> > + * @ops: pointer to the variant-specific operations
> > * @config_lock: locks the buffer list 'params'
> > * @params: queue of rkisp1_buffer
> > * @vdev_fmt: v4l2_format of the metadata format
> > @@ -268,6 +292,7 @@ struct rkisp1_stats {
> > struct rkisp1_params {
> > struct rkisp1_vdev_node vnode;
> > struct rkisp1_device *rkisp1;
> > + struct rkisp1_params_ops *ops;
> >
> > spinlock_t config_lock; /* locks the buffers list 'params' */
> > struct list_head params;
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> > index b6beddd988d0..a971892ba81d 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> > @@ -185,8 +185,8 @@ static void rkisp1_bls_config(struct rkisp1_params *params,
> >
> > /* ISP LS correction interface function */
> > static void
> > -rkisp1_lsc_correct_matrix_config(struct rkisp1_params *params,
> > - const struct rkisp1_cif_isp_lsc_config *pconfig)
> > +rkisp1_lsc_matrix_config(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_lsc_config *pconfig)
> > {
> > unsigned int isp_lsc_status, sram_addr, isp_lsc_table_sel, i, j, data;
> >
> > @@ -265,7 +265,7 @@ static void rkisp1_lsc_config(struct rkisp1_params *params,
> > lsc_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_LSC_CTRL);
> > rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_LSC_CTRL,
> > RKISP1_CIF_ISP_LSC_CTRL_ENA);
> > - rkisp1_lsc_correct_matrix_config(params, arg);
> > + params->ops->lsc_matrix_config(params, arg);
> >
> > for (i = 0; i < RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE / 2; i++) {
> > /* program x size tables */
> > @@ -955,7 +955,7 @@ rkisp1_isp_isr_other_config(struct rkisp1_params *params,
> >
> > /* update awb gains */
> > if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB_GAIN)
> > - rkisp1_awb_gain_config(params, &new_params->others.awb_gain_config);
> > + params->ops->awb_gain_config(params, &new_params->others.awb_gain_config);
> >
> > if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB_GAIN) {
> > if (module_ens & RKISP1_CIF_ISP_MODULE_AWB_GAIN)
> > @@ -1010,8 +1010,7 @@ rkisp1_isp_isr_other_config(struct rkisp1_params *params,
> >
> > /* update goc config */
> > if (module_cfg_update & RKISP1_CIF_ISP_MODULE_GOC)
> > - rkisp1_goc_config(params,
> > - &new_params->others.goc_config);
> > + params->ops->goc_config(params, &new_params->others.goc_config);
> >
> > if (module_en_update & RKISP1_CIF_ISP_MODULE_GOC) {
> > if (module_ens & RKISP1_CIF_ISP_MODULE_GOC)
> > @@ -1081,17 +1080,17 @@ static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
> >
> > /* update awb config */
> > if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB)
> > - rkisp1_awb_meas_config(params, &new_params->meas.awb_meas_config);
> > + params->ops->awb_meas_config(params, &new_params->meas.awb_meas_config);
> >
> > if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB)
> > - rkisp1_awb_meas_enable(params,
> > - &new_params->meas.awb_meas_config,
> > - !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
> > + params->ops->awb_meas_enable(params,
> > + &new_params->meas.awb_meas_config,
> > + !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
> >
> > /* update afc config */
> > if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AFC)
> > - rkisp1_afm_config(params,
> > - &new_params->meas.afc_config);
> > + params->ops->afm_config(params,
> > + &new_params->meas.afc_config);
> >
> > if (module_en_update & RKISP1_CIF_ISP_MODULE_AFC) {
> > if (module_ens & RKISP1_CIF_ISP_MODULE_AFC)
> > @@ -1106,18 +1105,21 @@ static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
> >
> > /* update hst config */
> > if (module_cfg_update & RKISP1_CIF_ISP_MODULE_HST)
> > - rkisp1_hst_config(params,
> > - &new_params->meas.hst_config);
> > + params->ops->hst_config(params,
> > + &new_params->meas.hst_config);
> >
> > if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
> > + params->ops->hst_enable(params,
> > + &new_params->meas.hst_config,
> > + !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
> > rkisp1_hst_enable(params,
> > &new_params->meas.hst_config,
> > !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
>
> shouldn't rkisp1_hst_enable call be removed?
thanks for catching that. You're right of course and actually
my work branch had a fixup commit to do that, I just seem to have
forgotten to merge it back into the patch I wanted to sent ;-)
Heiko
> >
> > /* update aec config */
> > if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AEC)
> > - rkisp1_aec_config(params,
> > - &new_params->meas.aec_config);
> > + params->ops->aec_config(params,
> > + &new_params->meas.aec_config);
> >
> > if (module_en_update & RKISP1_CIF_ISP_MODULE_AEC) {
> > if (module_ens & RKISP1_CIF_ISP_MODULE_AEC)
> > @@ -1218,20 +1220,20 @@ static void rkisp1_params_config_parameter(struct rkisp1_params *params)
> > {
> > struct rkisp1_cif_isp_hst_config hst = rkisp1_hst_params_default_config;
> >
> > - rkisp1_awb_meas_config(params, &rkisp1_awb_params_default_config);
> > - rkisp1_awb_meas_enable(params, &rkisp1_awb_params_default_config,
> > - true);
> > + params->ops->awb_meas_config(params, &rkisp1_awb_params_default_config);
> > + params->ops->awb_meas_enable(params, &rkisp1_awb_params_default_config,
> > + true);
> >
> > - rkisp1_aec_config(params, &rkisp1_aec_params_default_config);
> > + params->ops->aec_config(params, &rkisp1_aec_params_default_config);
> > rkisp1_param_set_bits(params, RKISP1_CIF_ISP_EXP_CTRL,
> > RKISP1_CIF_ISP_EXP_ENA);
> >
> > - rkisp1_afm_config(params, &rkisp1_afc_params_default_config);
> > + params->ops->afm_config(params, &rkisp1_afc_params_default_config);
> > rkisp1_param_set_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
> > RKISP1_CIF_ISP_AFM_ENA);
> >
> > memset(hst.hist_weight, 0x01, sizeof(hst.hist_weight));
> > - rkisp1_hst_config(params, &hst);
> > + params->ops->hst_config(params, &hst);
> > rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP,
> > rkisp1_hst_params_default_config.mode);
> >
> > @@ -1275,7 +1277,7 @@ void rkisp1_params_disable(struct rkisp1_params *params)
> > RKISP1_CIF_ISP_DEMOSAIC_BYPASS);
> > rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_FILT_MODE,
> > RKISP1_CIF_ISP_FLT_ENA);
> > - rkisp1_awb_meas_enable(params, NULL, false);
> > + params->ops->awb_meas_enable(params, NULL, false);
> > rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
> > RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
> > rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_EXP_CTRL,
> > @@ -1283,7 +1285,7 @@ void rkisp1_params_disable(struct rkisp1_params *params)
> > rkisp1_ctk_enable(params, false);
> > rkisp1_param_clear_bits(params, RKISP1_CIF_C_PROC_CTRL,
> > RKISP1_CIF_C_PROC_CTR_ENABLE);
> > - rkisp1_hst_enable(params, NULL, false);
> > + params->ops->hst_enable(params, NULL, false);
> > rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
> > RKISP1_CIF_ISP_AFM_ENA);
> > rkisp1_ie_enable(params, false);
> > @@ -1291,6 +1293,18 @@ void rkisp1_params_disable(struct rkisp1_params *params)
> > RKISP1_CIF_ISP_DPF_MODE_EN);
> > }
> >
> > +static struct rkisp1_params_ops rkisp1_params_ops = {
> > + .lsc_matrix_config = rkisp1_lsc_matrix_config,
> > + .goc_config = rkisp1_goc_config,
> > + .awb_meas_config = rkisp1_awb_meas_config,
> > + .awb_meas_enable = rkisp1_awb_meas_enable,
> > + .awb_gain_config = rkisp1_awb_gain_config,
> > + .aec_config = rkisp1_aec_config,
> > + .hst_config = rkisp1_hst_config,
> > + .hst_enable = rkisp1_hst_enable,
> > + .afm_config = rkisp1_afm_config,
> > +};
> > +
> > static int rkisp1_params_enum_fmt_meta_out(struct file *file, void *priv,
> > struct v4l2_fmtdesc *f)
> > {
> > @@ -1457,6 +1471,8 @@ static void rkisp1_init_params(struct rkisp1_params *params)
> > V4L2_META_FMT_RK_ISP1_PARAMS;
> > params->vdev_fmt.fmt.meta.buffersize =
> > sizeof(struct rkisp1_params_cfg);
> > +
> > + params->ops = &rkisp1_params_ops;
> > }
> >
> > int rkisp1_params_register(struct rkisp1_device *rkisp1)
> >
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 3/7] media: rockchip: rkisp1: make some isp-param functions variable
@ 2021-06-15 22:44 ` Heiko Stübner
0 siblings, 0 replies; 38+ messages in thread
From: Heiko Stübner @ 2021-06-15 22:44 UTC (permalink / raw)
To: mchehab, hverkuil-cisco, Dafna Hirschfeld
Cc: ezequiel, helen.koike, Laurent.pinchart, linux-rockchip, linux-media
Am Dienstag, 15. Juni 2021, 07:53:19 CEST schrieb Dafna Hirschfeld:
> Hi,
>
> On 15.06.21 03:37, Heiko Stuebner wrote:
> > From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> >
> > The isp block evolved in subsequent socs, so some functions
> > will behave differently on newer variants.
> >
> > Therefore make it possible to override the needed params functions.
> >
> > Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
> > ---
> > .../platform/rockchip/rkisp1/rkisp1-common.h | 25 ++++++++
> > .../platform/rockchip/rkisp1/rkisp1-params.c | 64 ++++++++++++-------
> > 2 files changed, 65 insertions(+), 24 deletions(-)
> >
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> > index 25dd5c93620e..74ddd8256366 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> > @@ -254,11 +254,35 @@ struct rkisp1_stats {
> > struct v4l2_format vdev_fmt;
> > };
> >
> > +struct rkisp1_params;
> > +struct rkisp1_params_ops {
> > + void (*lsc_matrix_config)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_lsc_config *pconfig);
> > + void (*goc_config)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_goc_config *arg);
> > + void (*awb_meas_config)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_awb_meas_config *arg);
> > + void (*awb_meas_enable)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_awb_meas_config *arg,
> > + bool en);
> > + void (*awb_gain_config)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_awb_gain_config *arg);
> > + void (*aec_config)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_aec_config *arg);
> > + void (*hst_config)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_hst_config *arg);
> > + void (*hst_enable)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_hst_config *arg, bool en);
> > + void (*afm_config)(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_afc_config *arg);
> > +};
> > +
> > /*
> > * struct rkisp1_params - ISP input parameters device
> > *
> > * @vnode: video node
> > * @rkisp1: pointer to the rkisp1 device
> > + * @ops: pointer to the variant-specific operations
> > * @config_lock: locks the buffer list 'params'
> > * @params: queue of rkisp1_buffer
> > * @vdev_fmt: v4l2_format of the metadata format
> > @@ -268,6 +292,7 @@ struct rkisp1_stats {
> > struct rkisp1_params {
> > struct rkisp1_vdev_node vnode;
> > struct rkisp1_device *rkisp1;
> > + struct rkisp1_params_ops *ops;
> >
> > spinlock_t config_lock; /* locks the buffers list 'params' */
> > struct list_head params;
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> > index b6beddd988d0..a971892ba81d 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> > @@ -185,8 +185,8 @@ static void rkisp1_bls_config(struct rkisp1_params *params,
> >
> > /* ISP LS correction interface function */
> > static void
> > -rkisp1_lsc_correct_matrix_config(struct rkisp1_params *params,
> > - const struct rkisp1_cif_isp_lsc_config *pconfig)
> > +rkisp1_lsc_matrix_config(struct rkisp1_params *params,
> > + const struct rkisp1_cif_isp_lsc_config *pconfig)
> > {
> > unsigned int isp_lsc_status, sram_addr, isp_lsc_table_sel, i, j, data;
> >
> > @@ -265,7 +265,7 @@ static void rkisp1_lsc_config(struct rkisp1_params *params,
> > lsc_ctrl = rkisp1_read(params->rkisp1, RKISP1_CIF_ISP_LSC_CTRL);
> > rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_LSC_CTRL,
> > RKISP1_CIF_ISP_LSC_CTRL_ENA);
> > - rkisp1_lsc_correct_matrix_config(params, arg);
> > + params->ops->lsc_matrix_config(params, arg);
> >
> > for (i = 0; i < RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE / 2; i++) {
> > /* program x size tables */
> > @@ -955,7 +955,7 @@ rkisp1_isp_isr_other_config(struct rkisp1_params *params,
> >
> > /* update awb gains */
> > if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB_GAIN)
> > - rkisp1_awb_gain_config(params, &new_params->others.awb_gain_config);
> > + params->ops->awb_gain_config(params, &new_params->others.awb_gain_config);
> >
> > if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB_GAIN) {
> > if (module_ens & RKISP1_CIF_ISP_MODULE_AWB_GAIN)
> > @@ -1010,8 +1010,7 @@ rkisp1_isp_isr_other_config(struct rkisp1_params *params,
> >
> > /* update goc config */
> > if (module_cfg_update & RKISP1_CIF_ISP_MODULE_GOC)
> > - rkisp1_goc_config(params,
> > - &new_params->others.goc_config);
> > + params->ops->goc_config(params, &new_params->others.goc_config);
> >
> > if (module_en_update & RKISP1_CIF_ISP_MODULE_GOC) {
> > if (module_ens & RKISP1_CIF_ISP_MODULE_GOC)
> > @@ -1081,17 +1080,17 @@ static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
> >
> > /* update awb config */
> > if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB)
> > - rkisp1_awb_meas_config(params, &new_params->meas.awb_meas_config);
> > + params->ops->awb_meas_config(params, &new_params->meas.awb_meas_config);
> >
> > if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB)
> > - rkisp1_awb_meas_enable(params,
> > - &new_params->meas.awb_meas_config,
> > - !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
> > + params->ops->awb_meas_enable(params,
> > + &new_params->meas.awb_meas_config,
> > + !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
> >
> > /* update afc config */
> > if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AFC)
> > - rkisp1_afm_config(params,
> > - &new_params->meas.afc_config);
> > + params->ops->afm_config(params,
> > + &new_params->meas.afc_config);
> >
> > if (module_en_update & RKISP1_CIF_ISP_MODULE_AFC) {
> > if (module_ens & RKISP1_CIF_ISP_MODULE_AFC)
> > @@ -1106,18 +1105,21 @@ static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
> >
> > /* update hst config */
> > if (module_cfg_update & RKISP1_CIF_ISP_MODULE_HST)
> > - rkisp1_hst_config(params,
> > - &new_params->meas.hst_config);
> > + params->ops->hst_config(params,
> > + &new_params->meas.hst_config);
> >
> > if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
> > + params->ops->hst_enable(params,
> > + &new_params->meas.hst_config,
> > + !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
> > rkisp1_hst_enable(params,
> > &new_params->meas.hst_config,
> > !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
>
> shouldn't rkisp1_hst_enable call be removed?
thanks for catching that. You're right of course and actually
my work branch had a fixup commit to do that, I just seem to have
forgotten to merge it back into the patch I wanted to sent ;-)
Heiko
> >
> > /* update aec config */
> > if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AEC)
> > - rkisp1_aec_config(params,
> > - &new_params->meas.aec_config);
> > + params->ops->aec_config(params,
> > + &new_params->meas.aec_config);
> >
> > if (module_en_update & RKISP1_CIF_ISP_MODULE_AEC) {
> > if (module_ens & RKISP1_CIF_ISP_MODULE_AEC)
> > @@ -1218,20 +1220,20 @@ static void rkisp1_params_config_parameter(struct rkisp1_params *params)
> > {
> > struct rkisp1_cif_isp_hst_config hst = rkisp1_hst_params_default_config;
> >
> > - rkisp1_awb_meas_config(params, &rkisp1_awb_params_default_config);
> > - rkisp1_awb_meas_enable(params, &rkisp1_awb_params_default_config,
> > - true);
> > + params->ops->awb_meas_config(params, &rkisp1_awb_params_default_config);
> > + params->ops->awb_meas_enable(params, &rkisp1_awb_params_default_config,
> > + true);
> >
> > - rkisp1_aec_config(params, &rkisp1_aec_params_default_config);
> > + params->ops->aec_config(params, &rkisp1_aec_params_default_config);
> > rkisp1_param_set_bits(params, RKISP1_CIF_ISP_EXP_CTRL,
> > RKISP1_CIF_ISP_EXP_ENA);
> >
> > - rkisp1_afm_config(params, &rkisp1_afc_params_default_config);
> > + params->ops->afm_config(params, &rkisp1_afc_params_default_config);
> > rkisp1_param_set_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
> > RKISP1_CIF_ISP_AFM_ENA);
> >
> > memset(hst.hist_weight, 0x01, sizeof(hst.hist_weight));
> > - rkisp1_hst_config(params, &hst);
> > + params->ops->hst_config(params, &hst);
> > rkisp1_param_set_bits(params, RKISP1_CIF_ISP_HIST_PROP,
> > rkisp1_hst_params_default_config.mode);
> >
> > @@ -1275,7 +1277,7 @@ void rkisp1_params_disable(struct rkisp1_params *params)
> > RKISP1_CIF_ISP_DEMOSAIC_BYPASS);
> > rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_FILT_MODE,
> > RKISP1_CIF_ISP_FLT_ENA);
> > - rkisp1_awb_meas_enable(params, NULL, false);
> > + params->ops->awb_meas_enable(params, NULL, false);
> > rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_CTRL,
> > RKISP1_CIF_ISP_CTRL_ISP_AWB_ENA);
> > rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_EXP_CTRL,
> > @@ -1283,7 +1285,7 @@ void rkisp1_params_disable(struct rkisp1_params *params)
> > rkisp1_ctk_enable(params, false);
> > rkisp1_param_clear_bits(params, RKISP1_CIF_C_PROC_CTRL,
> > RKISP1_CIF_C_PROC_CTR_ENABLE);
> > - rkisp1_hst_enable(params, NULL, false);
> > + params->ops->hst_enable(params, NULL, false);
> > rkisp1_param_clear_bits(params, RKISP1_CIF_ISP_AFM_CTRL,
> > RKISP1_CIF_ISP_AFM_ENA);
> > rkisp1_ie_enable(params, false);
> > @@ -1291,6 +1293,18 @@ void rkisp1_params_disable(struct rkisp1_params *params)
> > RKISP1_CIF_ISP_DPF_MODE_EN);
> > }
> >
> > +static struct rkisp1_params_ops rkisp1_params_ops = {
> > + .lsc_matrix_config = rkisp1_lsc_matrix_config,
> > + .goc_config = rkisp1_goc_config,
> > + .awb_meas_config = rkisp1_awb_meas_config,
> > + .awb_meas_enable = rkisp1_awb_meas_enable,
> > + .awb_gain_config = rkisp1_awb_gain_config,
> > + .aec_config = rkisp1_aec_config,
> > + .hst_config = rkisp1_hst_config,
> > + .hst_enable = rkisp1_hst_enable,
> > + .afm_config = rkisp1_afm_config,
> > +};
> > +
> > static int rkisp1_params_enum_fmt_meta_out(struct file *file, void *priv,
> > struct v4l2_fmtdesc *f)
> > {
> > @@ -1457,6 +1471,8 @@ static void rkisp1_init_params(struct rkisp1_params *params)
> > V4L2_META_FMT_RK_ISP1_PARAMS;
> > params->vdev_fmt.fmt.meta.buffersize =
> > sizeof(struct rkisp1_params_cfg);
> > +
> > + params->ops = &rkisp1_params_ops;
> > }
> >
> > int rkisp1_params_register(struct rkisp1_device *rkisp1)
> >
>
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 3/7] media: rockchip: rkisp1: make some isp-param functions variable
2021-06-15 0:37 ` Heiko Stuebner
(?)
@ 2021-06-16 18:17 ` kernel test robot
-1 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-06-16 18:17 UTC (permalink / raw)
To: Heiko Stuebner, mchehab, hverkuil-cisco
Cc: kbuild-all, ezequiel, dafna.hirschfeld, helen.koike,
Laurent.pinchart, linux-rockchip, linux-media, heiko,
Heiko Stuebner
[-- Attachment #1: Type: text/plain, Size: 11190 bytes --]
Hi Heiko,
I love your patch! Perhaps something to improve:
[auto build test WARNING on rockchip/for-next]
[also build test WARNING on v5.13-rc6 next-20210616]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Heiko-Stuebner/rkisp1-support-for-px30/20210616-201601
base: https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git for-next
config: ia64-randconfig-s032-20210615 (attached as .config)
compiler: ia64-linux-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.3-341-g8af24329-dirty
# https://github.com/0day-ci/linux/commit/3495922d4cf7d39e4a52d3b8588f8c46ab19e151
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Heiko-Stuebner/rkisp1-support-for-px30/20210616-201601
git checkout 3495922d4cf7d39e4a52d3b8588f8c46ab19e151
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=ia64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
drivers/media/platform/rockchip/rkisp1/rkisp1-params.c: In function 'rkisp1_isp_isr_meas_config':
>> drivers/media/platform/rockchip/rkisp1/rkisp1-params.c:1111:2: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
1111 | if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
| ^~
drivers/media/platform/rockchip/rkisp1/rkisp1-params.c:1115:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
1115 | rkisp1_hst_enable(params,
| ^~~~~~~~~~~~~~~~~
vim +/if +1111 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1071
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1072 static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1073 struct rkisp1_params_cfg *new_params)
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1074 {
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1075 unsigned int module_en_update, module_cfg_update, module_ens;
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1076
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1077 module_en_update = new_params->module_en_update;
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1078 module_cfg_update = new_params->module_cfg_update;
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1079 module_ens = new_params->module_ens;
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1080
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1081 /* update awb config */
db1733ce23bd375 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1082 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1083 params->ops->awb_meas_config(params, &new_params->meas.awb_meas_config);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1084
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1085 if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1086 params->ops->awb_meas_enable(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1087 &new_params->meas.awb_meas_config,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1088 !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1089
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1090 /* update afc config */
db1733ce23bd375 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1091 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AFC)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1092 params->ops->afm_config(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1093 &new_params->meas.afc_config);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1094
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1095 if (module_en_update & RKISP1_CIF_ISP_MODULE_AFC) {
cdda99d70d73d08 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1096 if (module_ens & RKISP1_CIF_ISP_MODULE_AFC)
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1097 rkisp1_param_set_bits(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1098 RKISP1_CIF_ISP_AFM_CTRL,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1099 RKISP1_CIF_ISP_AFM_ENA);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1100 else
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1101 rkisp1_param_clear_bits(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1102 RKISP1_CIF_ISP_AFM_CTRL,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1103 RKISP1_CIF_ISP_AFM_ENA);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1104 }
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1105
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1106 /* update hst config */
db1733ce23bd375 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1107 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_HST)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1108 params->ops->hst_config(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1109 &new_params->meas.hst_config);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1110
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 @1111 if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1112 params->ops->hst_enable(params,
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1113 &new_params->meas.hst_config,
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1114 !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1115 rkisp1_hst_enable(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1116 &new_params->meas.hst_config,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1117 !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1118
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1119 /* update aec config */
db1733ce23bd375 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1120 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AEC)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1121 params->ops->aec_config(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1122 &new_params->meas.aec_config);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1123
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1124 if (module_en_update & RKISP1_CIF_ISP_MODULE_AEC) {
cdda99d70d73d08 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1125 if (module_ens & RKISP1_CIF_ISP_MODULE_AEC)
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1126 rkisp1_param_set_bits(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1127 RKISP1_CIF_ISP_EXP_CTRL,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1128 RKISP1_CIF_ISP_EXP_ENA);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1129 else
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1130 rkisp1_param_clear_bits(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1131 RKISP1_CIF_ISP_EXP_CTRL,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1132 RKISP1_CIF_ISP_EXP_ENA);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1133 }
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1134 }
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1135
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 42047 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 3/7] media: rockchip: rkisp1: make some isp-param functions variable
@ 2021-06-16 18:17 ` kernel test robot
0 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-06-16 18:17 UTC (permalink / raw)
To: Heiko Stuebner, mchehab, hverkuil-cisco
Cc: kbuild-all, ezequiel, dafna.hirschfeld, helen.koike,
Laurent.pinchart, linux-rockchip, linux-media, heiko,
Heiko Stuebner
[-- Attachment #1: Type: text/plain, Size: 11190 bytes --]
Hi Heiko,
I love your patch! Perhaps something to improve:
[auto build test WARNING on rockchip/for-next]
[also build test WARNING on v5.13-rc6 next-20210616]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Heiko-Stuebner/rkisp1-support-for-px30/20210616-201601
base: https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git for-next
config: ia64-randconfig-s032-20210615 (attached as .config)
compiler: ia64-linux-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.3-341-g8af24329-dirty
# https://github.com/0day-ci/linux/commit/3495922d4cf7d39e4a52d3b8588f8c46ab19e151
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Heiko-Stuebner/rkisp1-support-for-px30/20210616-201601
git checkout 3495922d4cf7d39e4a52d3b8588f8c46ab19e151
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=ia64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
drivers/media/platform/rockchip/rkisp1/rkisp1-params.c: In function 'rkisp1_isp_isr_meas_config':
>> drivers/media/platform/rockchip/rkisp1/rkisp1-params.c:1111:2: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
1111 | if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
| ^~
drivers/media/platform/rockchip/rkisp1/rkisp1-params.c:1115:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
1115 | rkisp1_hst_enable(params,
| ^~~~~~~~~~~~~~~~~
vim +/if +1111 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1071
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1072 static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1073 struct rkisp1_params_cfg *new_params)
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1074 {
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1075 unsigned int module_en_update, module_cfg_update, module_ens;
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1076
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1077 module_en_update = new_params->module_en_update;
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1078 module_cfg_update = new_params->module_cfg_update;
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1079 module_ens = new_params->module_ens;
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1080
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1081 /* update awb config */
db1733ce23bd375 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1082 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1083 params->ops->awb_meas_config(params, &new_params->meas.awb_meas_config);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1084
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1085 if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1086 params->ops->awb_meas_enable(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1087 &new_params->meas.awb_meas_config,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1088 !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1089
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1090 /* update afc config */
db1733ce23bd375 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1091 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AFC)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1092 params->ops->afm_config(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1093 &new_params->meas.afc_config);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1094
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1095 if (module_en_update & RKISP1_CIF_ISP_MODULE_AFC) {
cdda99d70d73d08 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1096 if (module_ens & RKISP1_CIF_ISP_MODULE_AFC)
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1097 rkisp1_param_set_bits(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1098 RKISP1_CIF_ISP_AFM_CTRL,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1099 RKISP1_CIF_ISP_AFM_ENA);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1100 else
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1101 rkisp1_param_clear_bits(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1102 RKISP1_CIF_ISP_AFM_CTRL,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1103 RKISP1_CIF_ISP_AFM_ENA);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1104 }
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1105
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1106 /* update hst config */
db1733ce23bd375 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1107 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_HST)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1108 params->ops->hst_config(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1109 &new_params->meas.hst_config);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1110
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 @1111 if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1112 params->ops->hst_enable(params,
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1113 &new_params->meas.hst_config,
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1114 !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1115 rkisp1_hst_enable(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1116 &new_params->meas.hst_config,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1117 !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1118
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1119 /* update aec config */
db1733ce23bd375 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1120 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AEC)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1121 params->ops->aec_config(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1122 &new_params->meas.aec_config);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1123
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1124 if (module_en_update & RKISP1_CIF_ISP_MODULE_AEC) {
cdda99d70d73d08 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1125 if (module_ens & RKISP1_CIF_ISP_MODULE_AEC)
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1126 rkisp1_param_set_bits(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1127 RKISP1_CIF_ISP_EXP_CTRL,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1128 RKISP1_CIF_ISP_EXP_ENA);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1129 else
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1130 rkisp1_param_clear_bits(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1131 RKISP1_CIF_ISP_EXP_CTRL,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1132 RKISP1_CIF_ISP_EXP_ENA);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1133 }
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1134 }
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1135
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 42047 bytes --]
[-- Attachment #3: Type: text/plain, Size: 170 bytes --]
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 3/7] media: rockchip: rkisp1: make some isp-param functions variable
@ 2021-06-16 18:17 ` kernel test robot
0 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-06-16 18:17 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 11303 bytes --]
Hi Heiko,
I love your patch! Perhaps something to improve:
[auto build test WARNING on rockchip/for-next]
[also build test WARNING on v5.13-rc6 next-20210616]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Heiko-Stuebner/rkisp1-support-for-px30/20210616-201601
base: https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git for-next
config: ia64-randconfig-s032-20210615 (attached as .config)
compiler: ia64-linux-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.3-341-g8af24329-dirty
# https://github.com/0day-ci/linux/commit/3495922d4cf7d39e4a52d3b8588f8c46ab19e151
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Heiko-Stuebner/rkisp1-support-for-px30/20210616-201601
git checkout 3495922d4cf7d39e4a52d3b8588f8c46ab19e151
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=ia64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
drivers/media/platform/rockchip/rkisp1/rkisp1-params.c: In function 'rkisp1_isp_isr_meas_config':
>> drivers/media/platform/rockchip/rkisp1/rkisp1-params.c:1111:2: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
1111 | if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
| ^~
drivers/media/platform/rockchip/rkisp1/rkisp1-params.c:1115:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
1115 | rkisp1_hst_enable(params,
| ^~~~~~~~~~~~~~~~~
vim +/if +1111 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1071
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1072 static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1073 struct rkisp1_params_cfg *new_params)
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1074 {
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1075 unsigned int module_en_update, module_cfg_update, module_ens;
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1076
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1077 module_en_update = new_params->module_en_update;
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1078 module_cfg_update = new_params->module_cfg_update;
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1079 module_ens = new_params->module_ens;
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1080
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1081 /* update awb config */
db1733ce23bd375 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1082 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1083 params->ops->awb_meas_config(params, &new_params->meas.awb_meas_config);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1084
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1085 if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1086 params->ops->awb_meas_enable(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1087 &new_params->meas.awb_meas_config,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1088 !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1089
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1090 /* update afc config */
db1733ce23bd375 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1091 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AFC)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1092 params->ops->afm_config(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1093 &new_params->meas.afc_config);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1094
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1095 if (module_en_update & RKISP1_CIF_ISP_MODULE_AFC) {
cdda99d70d73d08 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1096 if (module_ens & RKISP1_CIF_ISP_MODULE_AFC)
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1097 rkisp1_param_set_bits(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1098 RKISP1_CIF_ISP_AFM_CTRL,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1099 RKISP1_CIF_ISP_AFM_ENA);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1100 else
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1101 rkisp1_param_clear_bits(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1102 RKISP1_CIF_ISP_AFM_CTRL,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1103 RKISP1_CIF_ISP_AFM_ENA);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1104 }
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1105
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1106 /* update hst config */
db1733ce23bd375 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1107 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_HST)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1108 params->ops->hst_config(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1109 &new_params->meas.hst_config);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1110
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 @1111 if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1112 params->ops->hst_enable(params,
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1113 &new_params->meas.hst_config,
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1114 !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1115 rkisp1_hst_enable(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1116 &new_params->meas.hst_config,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1117 !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1118
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1119 /* update aec config */
db1733ce23bd375 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1120 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AEC)
3495922d4cf7d39 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1121 params->ops->aec_config(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1122 &new_params->meas.aec_config);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1123
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1124 if (module_en_update & RKISP1_CIF_ISP_MODULE_AEC) {
cdda99d70d73d08 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1125 if (module_ens & RKISP1_CIF_ISP_MODULE_AEC)
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1126 rkisp1_param_set_bits(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1127 RKISP1_CIF_ISP_EXP_CTRL,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1128 RKISP1_CIF_ISP_EXP_ENA);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1129 else
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1130 rkisp1_param_clear_bits(params,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1131 RKISP1_CIF_ISP_EXP_CTRL,
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1132 RKISP1_CIF_ISP_EXP_ENA);
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1133 }
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1134 }
bae1155cf5798cc drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1135
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 42047 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 5/7] media: rockchip: rkisp1: add prefixes for v10 specific parts
2021-06-15 0:37 ` Heiko Stuebner
(?)
@ 2021-06-16 19:36 ` kernel test robot
-1 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-06-16 19:36 UTC (permalink / raw)
To: Heiko Stuebner, mchehab, hverkuil-cisco
Cc: kbuild-all, ezequiel, dafna.hirschfeld, helen.koike,
Laurent.pinchart, linux-rockchip, linux-media, heiko,
Heiko Stuebner
[-- Attachment #1: Type: text/plain, Size: 11456 bytes --]
Hi Heiko,
I love your patch! Yet something to improve:
[auto build test ERROR on rockchip/for-next]
[also build test ERROR on v5.13-rc6 next-20210616]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Heiko-Stuebner/rkisp1-support-for-px30/20210616-201601
base: https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git for-next
config: ia64-randconfig-s032-20210615 (attached as .config)
compiler: ia64-linux-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.3-341-g8af24329-dirty
# https://github.com/0day-ci/linux/commit/346e0127683f58d32c265369f5ec0aa7a984aeb5
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Heiko-Stuebner/rkisp1-support-for-px30/20210616-201601
git checkout 346e0127683f58d32c265369f5ec0aa7a984aeb5
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=ia64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/media/platform/rockchip/rkisp1/rkisp1-params.c: In function 'rkisp1_isp_isr_meas_config':
drivers/media/platform/rockchip/rkisp1/rkisp1-params.c:1111:2: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
1111 | if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
| ^~
drivers/media/platform/rockchip/rkisp1/rkisp1-params.c:1115:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
1115 | rkisp1_hst_enable(params,
| ^~~~~~~~~~~~~~~~~
>> drivers/media/platform/rockchip/rkisp1/rkisp1-params.c:1115:3: error: implicit declaration of function 'rkisp1_hst_enable'; did you mean 'rkisp1_ie_enable'? [-Werror=implicit-function-declaration]
1115 | rkisp1_hst_enable(params,
| ^~~~~~~~~~~~~~~~~
| rkisp1_ie_enable
cc1: some warnings being treated as errors
vim +1115 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1071
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1072 static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1073 struct rkisp1_params_cfg *new_params)
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1074 {
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1075 unsigned int module_en_update, module_cfg_update, module_ens;
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1076
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1077 module_en_update = new_params->module_en_update;
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1078 module_cfg_update = new_params->module_cfg_update;
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1079 module_ens = new_params->module_ens;
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1080
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1081 /* update awb config */
db1733ce23bd37 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1082 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1083 params->ops->awb_meas_config(params, &new_params->meas.awb_meas_config);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1084
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1085 if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1086 params->ops->awb_meas_enable(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1087 &new_params->meas.awb_meas_config,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1088 !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1089
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1090 /* update afc config */
db1733ce23bd37 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1091 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AFC)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1092 params->ops->afm_config(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1093 &new_params->meas.afc_config);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1094
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1095 if (module_en_update & RKISP1_CIF_ISP_MODULE_AFC) {
cdda99d70d73d0 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1096 if (module_ens & RKISP1_CIF_ISP_MODULE_AFC)
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1097 rkisp1_param_set_bits(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1098 RKISP1_CIF_ISP_AFM_CTRL,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1099 RKISP1_CIF_ISP_AFM_ENA);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1100 else
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1101 rkisp1_param_clear_bits(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1102 RKISP1_CIF_ISP_AFM_CTRL,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1103 RKISP1_CIF_ISP_AFM_ENA);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1104 }
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1105
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1106 /* update hst config */
db1733ce23bd37 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1107 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_HST)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1108 params->ops->hst_config(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1109 &new_params->meas.hst_config);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1110
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1111 if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1112 params->ops->hst_enable(params,
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1113 &new_params->meas.hst_config,
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1114 !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 @1115 rkisp1_hst_enable(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1116 &new_params->meas.hst_config,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1117 !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1118
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1119 /* update aec config */
db1733ce23bd37 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1120 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AEC)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1121 params->ops->aec_config(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1122 &new_params->meas.aec_config);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1123
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1124 if (module_en_update & RKISP1_CIF_ISP_MODULE_AEC) {
cdda99d70d73d0 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1125 if (module_ens & RKISP1_CIF_ISP_MODULE_AEC)
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1126 rkisp1_param_set_bits(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1127 RKISP1_CIF_ISP_EXP_CTRL,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1128 RKISP1_CIF_ISP_EXP_ENA);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1129 else
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1130 rkisp1_param_clear_bits(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1131 RKISP1_CIF_ISP_EXP_CTRL,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1132 RKISP1_CIF_ISP_EXP_ENA);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1133 }
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1134 }
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1135
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 42047 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 5/7] media: rockchip: rkisp1: add prefixes for v10 specific parts
@ 2021-06-16 19:36 ` kernel test robot
0 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-06-16 19:36 UTC (permalink / raw)
To: Heiko Stuebner, mchehab, hverkuil-cisco
Cc: kbuild-all, ezequiel, dafna.hirschfeld, helen.koike,
Laurent.pinchart, linux-rockchip, linux-media, heiko,
Heiko Stuebner
[-- Attachment #1: Type: text/plain, Size: 11456 bytes --]
Hi Heiko,
I love your patch! Yet something to improve:
[auto build test ERROR on rockchip/for-next]
[also build test ERROR on v5.13-rc6 next-20210616]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Heiko-Stuebner/rkisp1-support-for-px30/20210616-201601
base: https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git for-next
config: ia64-randconfig-s032-20210615 (attached as .config)
compiler: ia64-linux-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.3-341-g8af24329-dirty
# https://github.com/0day-ci/linux/commit/346e0127683f58d32c265369f5ec0aa7a984aeb5
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Heiko-Stuebner/rkisp1-support-for-px30/20210616-201601
git checkout 346e0127683f58d32c265369f5ec0aa7a984aeb5
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=ia64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/media/platform/rockchip/rkisp1/rkisp1-params.c: In function 'rkisp1_isp_isr_meas_config':
drivers/media/platform/rockchip/rkisp1/rkisp1-params.c:1111:2: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
1111 | if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
| ^~
drivers/media/platform/rockchip/rkisp1/rkisp1-params.c:1115:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
1115 | rkisp1_hst_enable(params,
| ^~~~~~~~~~~~~~~~~
>> drivers/media/platform/rockchip/rkisp1/rkisp1-params.c:1115:3: error: implicit declaration of function 'rkisp1_hst_enable'; did you mean 'rkisp1_ie_enable'? [-Werror=implicit-function-declaration]
1115 | rkisp1_hst_enable(params,
| ^~~~~~~~~~~~~~~~~
| rkisp1_ie_enable
cc1: some warnings being treated as errors
vim +1115 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1071
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1072 static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1073 struct rkisp1_params_cfg *new_params)
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1074 {
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1075 unsigned int module_en_update, module_cfg_update, module_ens;
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1076
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1077 module_en_update = new_params->module_en_update;
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1078 module_cfg_update = new_params->module_cfg_update;
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1079 module_ens = new_params->module_ens;
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1080
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1081 /* update awb config */
db1733ce23bd37 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1082 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1083 params->ops->awb_meas_config(params, &new_params->meas.awb_meas_config);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1084
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1085 if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1086 params->ops->awb_meas_enable(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1087 &new_params->meas.awb_meas_config,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1088 !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1089
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1090 /* update afc config */
db1733ce23bd37 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1091 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AFC)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1092 params->ops->afm_config(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1093 &new_params->meas.afc_config);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1094
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1095 if (module_en_update & RKISP1_CIF_ISP_MODULE_AFC) {
cdda99d70d73d0 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1096 if (module_ens & RKISP1_CIF_ISP_MODULE_AFC)
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1097 rkisp1_param_set_bits(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1098 RKISP1_CIF_ISP_AFM_CTRL,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1099 RKISP1_CIF_ISP_AFM_ENA);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1100 else
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1101 rkisp1_param_clear_bits(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1102 RKISP1_CIF_ISP_AFM_CTRL,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1103 RKISP1_CIF_ISP_AFM_ENA);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1104 }
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1105
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1106 /* update hst config */
db1733ce23bd37 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1107 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_HST)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1108 params->ops->hst_config(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1109 &new_params->meas.hst_config);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1110
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1111 if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1112 params->ops->hst_enable(params,
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1113 &new_params->meas.hst_config,
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1114 !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 @1115 rkisp1_hst_enable(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1116 &new_params->meas.hst_config,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1117 !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1118
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1119 /* update aec config */
db1733ce23bd37 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1120 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AEC)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1121 params->ops->aec_config(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1122 &new_params->meas.aec_config);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1123
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1124 if (module_en_update & RKISP1_CIF_ISP_MODULE_AEC) {
cdda99d70d73d0 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1125 if (module_ens & RKISP1_CIF_ISP_MODULE_AEC)
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1126 rkisp1_param_set_bits(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1127 RKISP1_CIF_ISP_EXP_CTRL,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1128 RKISP1_CIF_ISP_EXP_ENA);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1129 else
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1130 rkisp1_param_clear_bits(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1131 RKISP1_CIF_ISP_EXP_CTRL,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1132 RKISP1_CIF_ISP_EXP_ENA);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1133 }
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1134 }
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1135
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 42047 bytes --]
[-- Attachment #3: Type: text/plain, Size: 170 bytes --]
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2 5/7] media: rockchip: rkisp1: add prefixes for v10 specific parts
@ 2021-06-16 19:36 ` kernel test robot
0 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-06-16 19:36 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 11574 bytes --]
Hi Heiko,
I love your patch! Yet something to improve:
[auto build test ERROR on rockchip/for-next]
[also build test ERROR on v5.13-rc6 next-20210616]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Heiko-Stuebner/rkisp1-support-for-px30/20210616-201601
base: https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git for-next
config: ia64-randconfig-s032-20210615 (attached as .config)
compiler: ia64-linux-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.3-341-g8af24329-dirty
# https://github.com/0day-ci/linux/commit/346e0127683f58d32c265369f5ec0aa7a984aeb5
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Heiko-Stuebner/rkisp1-support-for-px30/20210616-201601
git checkout 346e0127683f58d32c265369f5ec0aa7a984aeb5
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=ia64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/media/platform/rockchip/rkisp1/rkisp1-params.c: In function 'rkisp1_isp_isr_meas_config':
drivers/media/platform/rockchip/rkisp1/rkisp1-params.c:1111:2: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
1111 | if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
| ^~
drivers/media/platform/rockchip/rkisp1/rkisp1-params.c:1115:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
1115 | rkisp1_hst_enable(params,
| ^~~~~~~~~~~~~~~~~
>> drivers/media/platform/rockchip/rkisp1/rkisp1-params.c:1115:3: error: implicit declaration of function 'rkisp1_hst_enable'; did you mean 'rkisp1_ie_enable'? [-Werror=implicit-function-declaration]
1115 | rkisp1_hst_enable(params,
| ^~~~~~~~~~~~~~~~~
| rkisp1_ie_enable
cc1: some warnings being treated as errors
vim +1115 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1071
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1072 static void rkisp1_isp_isr_meas_config(struct rkisp1_params *params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1073 struct rkisp1_params_cfg *new_params)
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1074 {
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1075 unsigned int module_en_update, module_cfg_update, module_ens;
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1076
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1077 module_en_update = new_params->module_en_update;
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1078 module_cfg_update = new_params->module_cfg_update;
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1079 module_ens = new_params->module_ens;
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1080
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1081 /* update awb config */
db1733ce23bd37 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1082 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AWB)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1083 params->ops->awb_meas_config(params, &new_params->meas.awb_meas_config);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1084
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1085 if (module_en_update & RKISP1_CIF_ISP_MODULE_AWB)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1086 params->ops->awb_meas_enable(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1087 &new_params->meas.awb_meas_config,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1088 !!(module_ens & RKISP1_CIF_ISP_MODULE_AWB));
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1089
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1090 /* update afc config */
db1733ce23bd37 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1091 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AFC)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1092 params->ops->afm_config(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1093 &new_params->meas.afc_config);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1094
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1095 if (module_en_update & RKISP1_CIF_ISP_MODULE_AFC) {
cdda99d70d73d0 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1096 if (module_ens & RKISP1_CIF_ISP_MODULE_AFC)
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1097 rkisp1_param_set_bits(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1098 RKISP1_CIF_ISP_AFM_CTRL,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1099 RKISP1_CIF_ISP_AFM_ENA);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1100 else
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1101 rkisp1_param_clear_bits(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1102 RKISP1_CIF_ISP_AFM_CTRL,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1103 RKISP1_CIF_ISP_AFM_ENA);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1104 }
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1105
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1106 /* update hst config */
db1733ce23bd37 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1107 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_HST)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1108 params->ops->hst_config(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1109 &new_params->meas.hst_config);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1110
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1111 if (module_en_update & RKISP1_CIF_ISP_MODULE_HST)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1112 params->ops->hst_enable(params,
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1113 &new_params->meas.hst_config,
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1114 !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 @1115 rkisp1_hst_enable(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1116 &new_params->meas.hst_config,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1117 !!(module_ens & RKISP1_CIF_ISP_MODULE_HST));
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1118
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1119 /* update aec config */
db1733ce23bd37 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1120 if (module_cfg_update & RKISP1_CIF_ISP_MODULE_AEC)
3495922d4cf7d3 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c Heiko Stuebner 2021-06-15 1121 params->ops->aec_config(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1122 &new_params->meas.aec_config);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1123
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1124 if (module_en_update & RKISP1_CIF_ISP_MODULE_AEC) {
cdda99d70d73d0 drivers/staging/media/rkisp1/rkisp1-params.c Dafna Hirschfeld 2020-10-19 1125 if (module_ens & RKISP1_CIF_ISP_MODULE_AEC)
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1126 rkisp1_param_set_bits(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1127 RKISP1_CIF_ISP_EXP_CTRL,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1128 RKISP1_CIF_ISP_EXP_ENA);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1129 else
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1130 rkisp1_param_clear_bits(params,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1131 RKISP1_CIF_ISP_EXP_CTRL,
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1132 RKISP1_CIF_ISP_EXP_ENA);
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1133 }
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1134 }
bae1155cf5798c drivers/staging/media/rkisp1/rkisp1-params.c Jacob Chen 2020-01-08 1135
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 42047 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
end of thread, other threads:[~2021-06-16 19:38 UTC | newest]
Thread overview: 38+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-15 0:37 [PATCH v2 0/7] rkisp1 support for px30 Heiko Stuebner
2021-06-15 0:37 ` Heiko Stuebner
2021-06-15 0:37 ` [PATCH v2 1/7] media: rockchip: rkisp1: remove unused irq variable Heiko Stuebner
2021-06-15 0:37 ` Heiko Stuebner
2021-06-15 5:44 ` Dafna Hirschfeld
2021-06-15 5:44 ` Dafna Hirschfeld
2021-06-15 0:37 ` [PATCH v2 2/7] media: rockchip: rkisp1: allow separate interrupts Heiko Stuebner
2021-06-15 0:37 ` Heiko Stuebner
2021-06-15 5:42 ` Dafna Hirschfeld
2021-06-15 5:42 ` Dafna Hirschfeld
2021-06-15 0:37 ` [PATCH v2 3/7] media: rockchip: rkisp1: make some isp-param functions variable Heiko Stuebner
2021-06-15 0:37 ` Heiko Stuebner
2021-06-15 5:53 ` Dafna Hirschfeld
2021-06-15 5:53 ` Dafna Hirschfeld
2021-06-15 22:44 ` Heiko Stübner
2021-06-15 22:44 ` Heiko Stübner
2021-06-16 18:17 ` kernel test robot
2021-06-16 18:17 ` kernel test robot
2021-06-16 18:17 ` kernel test robot
2021-06-15 0:37 ` [PATCH v2 4/7] media: rockchip: rkisp1: make some isp-stats " Heiko Stuebner
2021-06-15 0:37 ` Heiko Stuebner
2021-06-15 0:37 ` [PATCH v2 5/7] media: rockchip: rkisp1: add prefixes for v10 specific parts Heiko Stuebner
2021-06-15 0:37 ` Heiko Stuebner
2021-06-15 6:06 ` Dafna Hirschfeld
2021-06-15 6:06 ` Dafna Hirschfeld
2021-06-16 19:36 ` kernel test robot
2021-06-16 19:36 ` kernel test robot
2021-06-16 19:36 ` kernel test robot
2021-06-15 0:37 ` [PATCH v2 6/7] media: rockchip: rkisp1: add support for v12 isp variants Heiko Stuebner
2021-06-15 0:37 ` Heiko Stuebner
2021-06-15 6:33 ` Dafna Hirschfeld
2021-06-15 6:33 ` Dafna Hirschfeld
2021-06-15 22:31 ` Heiko Stübner
2021-06-15 22:31 ` Heiko Stübner
2021-06-15 0:37 ` [PATCH v2 7/7] media: rockchip: rkisp1: add support for px30 isp version Heiko Stuebner
2021-06-15 0:37 ` Heiko Stuebner
2021-06-15 6:31 ` Dafna Hirschfeld
2021-06-15 6:31 ` Dafna Hirschfeld
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.