[media] exynos4-is: Use common driver data for all FIMC-LITE IP instances
There is no need to use separate variant data structure for each FIMC-LITE IP instance. According to my knowledge there are no differences across them on Exynos4 as well as Exynos5 SoCs. Drop flite_variant data structure and use struct flite_drvdata instead. Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
8cec74c60b
commit
9c8399c86c
@@ -528,7 +528,7 @@ static const struct fimc_fmt *fimc_lite_try_format(struct fimc_lite *fimc,
|
|||||||
u32 *width, u32 *height,
|
u32 *width, u32 *height,
|
||||||
u32 *code, u32 *fourcc, int pad)
|
u32 *code, u32 *fourcc, int pad)
|
||||||
{
|
{
|
||||||
struct flite_variant *variant = fimc->variant;
|
struct flite_drvdata *dd = fimc->dd;
|
||||||
const struct fimc_fmt *fmt;
|
const struct fimc_fmt *fmt;
|
||||||
|
|
||||||
fmt = fimc_lite_find_format(fourcc, code, 0);
|
fmt = fimc_lite_find_format(fourcc, code, 0);
|
||||||
@@ -541,12 +541,12 @@ static const struct fimc_fmt *fimc_lite_try_format(struct fimc_lite *fimc,
|
|||||||
*fourcc = fmt->fourcc;
|
*fourcc = fmt->fourcc;
|
||||||
|
|
||||||
if (pad == FLITE_SD_PAD_SINK) {
|
if (pad == FLITE_SD_PAD_SINK) {
|
||||||
v4l_bound_align_image(width, 8, variant->max_width,
|
v4l_bound_align_image(width, 8, dd->max_width,
|
||||||
ffs(variant->out_width_align) - 1,
|
ffs(dd->out_width_align) - 1,
|
||||||
height, 0, variant->max_height, 0, 0);
|
height, 0, dd->max_height, 0, 0);
|
||||||
} else {
|
} else {
|
||||||
v4l_bound_align_image(width, 8, fimc->inp_frame.rect.width,
|
v4l_bound_align_image(width, 8, fimc->inp_frame.rect.width,
|
||||||
ffs(variant->out_width_align) - 1,
|
ffs(dd->out_width_align) - 1,
|
||||||
height, 0, fimc->inp_frame.rect.height,
|
height, 0, fimc->inp_frame.rect.height,
|
||||||
0, 0);
|
0, 0);
|
||||||
}
|
}
|
||||||
@@ -566,7 +566,7 @@ static void fimc_lite_try_crop(struct fimc_lite *fimc, struct v4l2_rect *r)
|
|||||||
|
|
||||||
/* Adjust left/top if cropping rectangle got out of bounds */
|
/* Adjust left/top if cropping rectangle got out of bounds */
|
||||||
r->left = clamp_t(u32, r->left, 0, frame->f_width - r->width);
|
r->left = clamp_t(u32, r->left, 0, frame->f_width - r->width);
|
||||||
r->left = round_down(r->left, fimc->variant->win_hor_offs_align);
|
r->left = round_down(r->left, fimc->dd->win_hor_offs_align);
|
||||||
r->top = clamp_t(u32, r->top, 0, frame->f_height - r->height);
|
r->top = clamp_t(u32, r->top, 0, frame->f_height - r->height);
|
||||||
|
|
||||||
v4l2_dbg(1, debug, &fimc->subdev, "(%d,%d)/%dx%d, sink fmt: %dx%d\n",
|
v4l2_dbg(1, debug, &fimc->subdev, "(%d,%d)/%dx%d, sink fmt: %dx%d\n",
|
||||||
@@ -586,7 +586,7 @@ static void fimc_lite_try_compose(struct fimc_lite *fimc, struct v4l2_rect *r)
|
|||||||
|
|
||||||
/* Adjust left/top if the composing rectangle got out of bounds */
|
/* Adjust left/top if the composing rectangle got out of bounds */
|
||||||
r->left = clamp_t(u32, r->left, 0, frame->f_width - r->width);
|
r->left = clamp_t(u32, r->left, 0, frame->f_width - r->width);
|
||||||
r->left = round_down(r->left, fimc->variant->out_hor_offs_align);
|
r->left = round_down(r->left, fimc->dd->out_hor_offs_align);
|
||||||
r->top = clamp_t(u32, r->top, 0, fimc->out_frame.f_height - r->height);
|
r->top = clamp_t(u32, r->top, 0, fimc->out_frame.f_height - r->height);
|
||||||
|
|
||||||
v4l2_dbg(1, debug, &fimc->subdev, "(%d,%d)/%dx%d, source fmt: %dx%d\n",
|
v4l2_dbg(1, debug, &fimc->subdev, "(%d,%d)/%dx%d, source fmt: %dx%d\n",
|
||||||
@@ -647,8 +647,8 @@ static int fimc_lite_try_fmt(struct fimc_lite *fimc,
|
|||||||
struct v4l2_pix_format_mplane *pixm,
|
struct v4l2_pix_format_mplane *pixm,
|
||||||
const struct fimc_fmt **ffmt)
|
const struct fimc_fmt **ffmt)
|
||||||
{
|
{
|
||||||
struct flite_variant *variant = fimc->variant;
|
|
||||||
u32 bpl = pixm->plane_fmt[0].bytesperline;
|
u32 bpl = pixm->plane_fmt[0].bytesperline;
|
||||||
|
struct flite_drvdata *dd = fimc->dd;
|
||||||
const struct fimc_fmt *fmt;
|
const struct fimc_fmt *fmt;
|
||||||
|
|
||||||
fmt = fimc_lite_find_format(&pixm->pixelformat, NULL, 0);
|
fmt = fimc_lite_find_format(&pixm->pixelformat, NULL, 0);
|
||||||
@@ -656,9 +656,9 @@ static int fimc_lite_try_fmt(struct fimc_lite *fimc,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (ffmt)
|
if (ffmt)
|
||||||
*ffmt = fmt;
|
*ffmt = fmt;
|
||||||
v4l_bound_align_image(&pixm->width, 8, variant->max_width,
|
v4l_bound_align_image(&pixm->width, 8, dd->max_width,
|
||||||
ffs(variant->out_width_align) - 1,
|
ffs(dd->out_width_align) - 1,
|
||||||
&pixm->height, 0, variant->max_height, 0, 0);
|
&pixm->height, 0, dd->max_height, 0, 0);
|
||||||
|
|
||||||
if ((bpl == 0 || ((bpl * 8) / fmt->depth[0]) < pixm->width))
|
if ((bpl == 0 || ((bpl * 8) / fmt->depth[0]) < pixm->width))
|
||||||
pixm->plane_fmt[0].bytesperline = (pixm->width *
|
pixm->plane_fmt[0].bytesperline = (pixm->width *
|
||||||
@@ -1429,7 +1429,7 @@ static int fimc_lite_probe(struct platform_device *pdev)
|
|||||||
if (!drv_data || fimc->index < 0 || fimc->index >= FIMC_LITE_MAX_DEVS)
|
if (!drv_data || fimc->index < 0 || fimc->index >= FIMC_LITE_MAX_DEVS)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
fimc->variant = drv_data->variant[fimc->index];
|
fimc->dd = drv_data;
|
||||||
fimc->pdev = pdev;
|
fimc->pdev = pdev;
|
||||||
|
|
||||||
init_waitqueue_head(&fimc->irq_queue);
|
init_waitqueue_head(&fimc->irq_queue);
|
||||||
@@ -1577,7 +1577,8 @@ static const struct dev_pm_ops fimc_lite_pm_ops = {
|
|||||||
NULL)
|
NULL)
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct flite_variant fimc_lite0_variant_exynos4 = {
|
/* EXYNOS4212, EXYNOS4412 */
|
||||||
|
static struct flite_drvdata fimc_lite_drvdata_exynos4 = {
|
||||||
.max_width = 8192,
|
.max_width = 8192,
|
||||||
.max_height = 8192,
|
.max_height = 8192,
|
||||||
.out_width_align = 8,
|
.out_width_align = 8,
|
||||||
@@ -1585,14 +1586,6 @@ static struct flite_variant fimc_lite0_variant_exynos4 = {
|
|||||||
.out_hor_offs_align = 8,
|
.out_hor_offs_align = 8,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* EXYNOS4212, EXYNOS4412 */
|
|
||||||
static struct flite_drvdata fimc_lite_drvdata_exynos4 = {
|
|
||||||
.variant = {
|
|
||||||
[0] = &fimc_lite0_variant_exynos4,
|
|
||||||
[1] = &fimc_lite0_variant_exynos4,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct platform_device_id fimc_lite_driver_ids[] = {
|
static struct platform_device_id fimc_lite_driver_ids[] = {
|
||||||
{
|
{
|
||||||
.name = "exynos-fimc-lite",
|
.name = "exynos-fimc-lite",
|
||||||
|
@@ -48,7 +48,7 @@ enum {
|
|||||||
#define FLITE_SD_PAD_SOURCE_ISP 2
|
#define FLITE_SD_PAD_SOURCE_ISP 2
|
||||||
#define FLITE_SD_PADS_NUM 3
|
#define FLITE_SD_PADS_NUM 3
|
||||||
|
|
||||||
struct flite_variant {
|
struct flite_drvdata {
|
||||||
unsigned short max_width;
|
unsigned short max_width;
|
||||||
unsigned short max_height;
|
unsigned short max_height;
|
||||||
unsigned short out_width_align;
|
unsigned short out_width_align;
|
||||||
@@ -56,10 +56,6 @@ struct flite_variant {
|
|||||||
unsigned short out_hor_offs_align;
|
unsigned short out_hor_offs_align;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct flite_drvdata {
|
|
||||||
struct flite_variant *variant[FIMC_LITE_MAX_DEVS];
|
|
||||||
};
|
|
||||||
|
|
||||||
#define fimc_lite_get_drvdata(_pdev) \
|
#define fimc_lite_get_drvdata(_pdev) \
|
||||||
((struct flite_drvdata *) platform_get_device_id(_pdev)->driver_data)
|
((struct flite_drvdata *) platform_get_device_id(_pdev)->driver_data)
|
||||||
|
|
||||||
@@ -96,7 +92,7 @@ struct flite_buffer {
|
|||||||
/**
|
/**
|
||||||
* struct fimc_lite - fimc lite structure
|
* struct fimc_lite - fimc lite structure
|
||||||
* @pdev: pointer to FIMC-LITE platform device
|
* @pdev: pointer to FIMC-LITE platform device
|
||||||
* @variant: variant information for this IP
|
* @dd: SoC specific driver data structure
|
||||||
* @v4l2_dev: pointer to top the level v4l2_device
|
* @v4l2_dev: pointer to top the level v4l2_device
|
||||||
* @vfd: video device node
|
* @vfd: video device node
|
||||||
* @fh: v4l2 file handle
|
* @fh: v4l2 file handle
|
||||||
@@ -132,7 +128,7 @@ struct flite_buffer {
|
|||||||
*/
|
*/
|
||||||
struct fimc_lite {
|
struct fimc_lite {
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
struct flite_variant *variant;
|
struct flite_drvdata *dd;
|
||||||
struct v4l2_device *v4l2_dev;
|
struct v4l2_device *v4l2_dev;
|
||||||
struct video_device vfd;
|
struct video_device vfd;
|
||||||
struct v4l2_fh fh;
|
struct v4l2_fh fh;
|
||||||
|
Reference in New Issue
Block a user