summaryrefslogtreecommitdiffstats
path: root/drivers/video
diff options
context:
space:
mode:
authorPhilipp Zabel <p.zabel@pengutronix.de>2016-08-24 12:40:17 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2016-08-25 08:28:40 +0200
commit1be6d321efbd4113488dae300cbb3e1f30582a9f (patch)
treec14501296c1c4f5eb20b0c06f10758e658a17ec7 /drivers/video
parenteabab332838178044b98014b06d3195531eac95d (diff)
downloadbarebox-1be6d321efbd4113488dae300cbb3e1f30582a9f.tar.gz
barebox-1be6d321efbd4113488dae300cbb3e1f30582a9f.tar.xz
video: switch to media bus formats
V4L2 pixel formats are supposed to describe video frames in memory. To describe the pixel format on the hardware bus between display interface and encoders, use media bus formats, which are more expressive. This allows to get rid of the custom GBR24 and LVDS666 fourccs. Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/imx-ipu-v3/imx-hdmi.c3
-rw-r--r--drivers/video/imx-ipu-v3/imx-ipu-v3.h4
-rw-r--r--drivers/video/imx-ipu-v3/imx-ldb.c7
-rw-r--r--drivers/video/imx-ipu-v3/ipu-dc.c19
-rw-r--r--drivers/video/imx-ipu-v3/ipu-prv.h2
-rw-r--r--drivers/video/imx-ipu-v3/ipufb.c21
6 files changed, 28 insertions, 28 deletions
diff --git a/drivers/video/imx-ipu-v3/imx-hdmi.c b/drivers/video/imx-ipu-v3/imx-hdmi.c
index 8b251a52ea..17b6e4cc25 100644
--- a/drivers/video/imx-ipu-v3/imx-hdmi.c
+++ b/drivers/video/imx-ipu-v3/imx-hdmi.c
@@ -22,6 +22,7 @@
#include <asm-generic/div64.h>
#include <linux/clk.h>
#include <i2c/i2c.h>
+#include <video/media-bus-format.h>
#include <video/vpl.h>
#include <mach/imx6-regs.h>
#include <mach/imx53-regs.h>
@@ -1261,7 +1262,7 @@ static int dw_hdmi_ioctl(struct vpl *vpl, unsigned int port,
mode = data;
mode->di_clkflags = IPU_DI_CLKMODE_EXT | IPU_DI_CLKMODE_SYNC;
- mode->interface_pix_fmt = V4L2_PIX_FMT_RGB24;
+ mode->bus_format = MEDIA_BUS_FMT_RGB888_1X24;
return 0;
}
diff --git a/drivers/video/imx-ipu-v3/imx-ipu-v3.h b/drivers/video/imx-ipu-v3/imx-ipu-v3.h
index fbfec22e4f..cdfff6992f 100644
--- a/drivers/video/imx-ipu-v3/imx-ipu-v3.h
+++ b/drivers/video/imx-ipu-v3/imx-ipu-v3.h
@@ -116,7 +116,7 @@ struct ipu_di;
struct ipu_dc *ipu_dc_get(struct ipu_soc *ipu, int channel);
void ipu_dc_put(struct ipu_dc *dc);
int ipu_dc_init_sync(struct ipu_dc *dc, struct ipu_di *di, bool interlaced,
- u32 pixel_fmt, u32 width);
+ u32 bus_format, u32 width);
void ipu_dc_enable_channel(struct ipu_dc *dc);
void ipu_dc_disable_channel(struct ipu_dc *dc);
@@ -323,7 +323,7 @@ struct ipu_client_platformdata {
struct ipu_di_mode {
u32 di_clkflags;
- u32 interface_pix_fmt;
+ u32 bus_format;
};
#define IMX_IPU_VPL_DI_MODE 0x12660001
diff --git a/drivers/video/imx-ipu-v3/imx-ldb.c b/drivers/video/imx-ipu-v3/imx-ldb.c
index 17ae894bf7..14a86a42c1 100644
--- a/drivers/video/imx-ipu-v3/imx-ldb.c
+++ b/drivers/video/imx-ipu-v3/imx-ldb.c
@@ -26,6 +26,7 @@
#include <malloc.h>
#include <errno.h>
#include <init.h>
+#include <video/media-bus-format.h>
#include <video/vpl.h>
#include <mfd/imx6q-iomuxc-gpr.h>
#include <linux/clk.h>
@@ -75,7 +76,7 @@ struct imx_ldb_data {
struct imx_ldb {
struct device_d *dev;
- u32 interface_pix_fmt;
+ u32 bus_format;
int mode_valid;
struct imx_ldb_channel channel[2];
u32 ldb_ctrl;
@@ -273,8 +274,8 @@ static int imx_ldb_ioctl(struct vpl *vpl, unsigned int port,
mode = data;
mode->di_clkflags = IPU_DI_CLKMODE_EXT | IPU_DI_CLKMODE_SYNC;
- mode->interface_pix_fmt = (imx_ldb_ch->datawidth == 24) ?
- V4L2_PIX_FMT_RGB24 : V4L2_PIX_FMT_BGR666;
+ mode->bus_format = (imx_ldb_ch->datawidth == 24) ?
+ MEDIA_BUS_FMT_RGB888_1X24 : MEDIA_BUS_FMT_RGB666_1X18;
return 0;
case VPL_GET_VIDEOMODES:
diff --git a/drivers/video/imx-ipu-v3/ipu-dc.c b/drivers/video/imx-ipu-v3/ipu-dc.c
index 2deb2ae048..7b343e8149 100644
--- a/drivers/video/imx-ipu-v3/ipu-dc.c
+++ b/drivers/video/imx-ipu-v3/ipu-dc.c
@@ -17,6 +17,7 @@
#include <linux/err.h>
#include <linux/clk.h>
#include <malloc.h>
+#include <video/media-bus-format.h>
#include "imx-ipu-v3.h"
#include "ipu-prv.h"
@@ -138,18 +139,18 @@ static void dc_write_tmpl(struct ipu_dc *dc, int word, u32 opcode, u32 operand,
ipuwritel("dc", reg2, priv->dc_tmpl_reg + word * 8 + 4);
}
-static int ipu_pixfmt_to_map(u32 fmt)
+static int ipu_bus_format_to_map(u32 bus_format)
{
- switch (fmt) {
- case V4L2_PIX_FMT_RGB24:
+ switch (bus_format) {
+ case MEDIA_BUS_FMT_RGB888_1X24:
return IPU_DC_MAP_RGB24;
- case V4L2_PIX_FMT_RGB565:
+ case MEDIA_BUS_FMT_RGB565_1X16:
return IPU_DC_MAP_RGB565;
- case IPU_PIX_FMT_GBR24:
+ case MEDIA_BUS_FMT_GBR888_1X24:
return IPU_DC_MAP_GBR24;
- case V4L2_PIX_FMT_BGR666:
+ case MEDIA_BUS_FMT_RGB666_1X18:
return IPU_DC_MAP_BGR666;
- case V4L2_PIX_FMT_BGR24:
+ case MEDIA_BUS_FMT_BGR888_1X24:
return IPU_DC_MAP_BGR24;
default:
return -EINVAL;
@@ -157,7 +158,7 @@ static int ipu_pixfmt_to_map(u32 fmt)
}
int ipu_dc_init_sync(struct ipu_dc *dc, struct ipu_di *di, bool interlaced,
- u32 pixel_fmt, u32 width)
+ u32 bus_format, u32 width)
{
struct ipu_dc_priv *priv = dc->priv;
u32 reg = 0;
@@ -165,7 +166,7 @@ int ipu_dc_init_sync(struct ipu_dc *dc, struct ipu_di *di, bool interlaced,
dc->di = ipu_di_get_num(di);
- map = ipu_pixfmt_to_map(pixel_fmt);
+ map = ipu_bus_format_to_map(bus_format);
if (map < 0) {
dev_dbg(priv->dev, "IPU_DISP: No MAP\n");
return map;
diff --git a/drivers/video/imx-ipu-v3/ipu-prv.h b/drivers/video/imx-ipu-v3/ipu-prv.h
index 44d7802521..4d1c0692de 100644
--- a/drivers/video/imx-ipu-v3/ipu-prv.h
+++ b/drivers/video/imx-ipu-v3/ipu-prv.h
@@ -19,8 +19,6 @@ struct ipu_soc;
#include "imx-ipu-v3.h"
-#define IPU_PIX_FMT_GBR24 v4l2_fourcc('G', 'B', 'R', '3')
-
#define IPUV3_CHANNEL_CSI0 0
#define IPUV3_CHANNEL_CSI1 1
#define IPUV3_CHANNEL_CSI2 2
diff --git a/drivers/video/imx-ipu-v3/ipufb.c b/drivers/video/imx-ipu-v3/ipufb.c
index 67fec11d4a..cfafa22c7c 100644
--- a/drivers/video/imx-ipu-v3/ipufb.c
+++ b/drivers/video/imx-ipu-v3/ipufb.c
@@ -23,6 +23,7 @@
#include <linux/clk.h>
#include <linux/err.h>
#include <asm-generic/div64.h>
+#include <video/media-bus-format.h>
#include "imx-ipu-v3.h"
#include "ipuv3-plane.h"
@@ -56,7 +57,7 @@ struct ipufb_info {
void (*enable)(int enable);
unsigned int di_clkflags;
- u32 interface_pix_fmt;
+ u32 bus_format;
struct ipu_dc *dc;
struct ipu_di *di;
@@ -108,7 +109,7 @@ int ipu_crtc_mode_set(struct ipufb_info *fbi,
int ret;
struct ipu_di_signal_cfg sig_cfg = {};
struct ipu_di_mode di_mode = {};
- u32 interface_pix_fmt;
+ u32 bus_format;
dev_info(fbi->dev, "%s: mode->xres: %d\n", __func__,
mode->xres);
@@ -116,8 +117,7 @@ int ipu_crtc_mode_set(struct ipufb_info *fbi,
mode->yres);
vpl_ioctl(&fbi->vpl, 2 + fbi->dino, IMX_IPU_VPL_DI_MODE, &di_mode);
- interface_pix_fmt = di_mode.interface_pix_fmt ?
- di_mode.interface_pix_fmt : fbi->interface_pix_fmt;
+ bus_format = di_mode.bus_format ?: fbi->bus_format;
if (mode->sync & FB_SYNC_HOR_HIGH_ACT)
sig_cfg.Hsync_pol = 1;
@@ -148,8 +148,8 @@ int ipu_crtc_mode_set(struct ipufb_info *fbi,
sig_cfg.hsync_pin = 2;
sig_cfg.vsync_pin = 3;
- ret = ipu_dc_init_sync(fbi->dc, fbi->di, sig_cfg.interlaced,
- interface_pix_fmt, mode->xres);
+ ret = ipu_dc_init_sync(fbi->dc, fbi->di, sig_cfg.interlaced, bus_format,
+ mode->xres);
if (ret) {
dev_err(fbi->dev,
"initializing display controller failed with %d\n",
@@ -318,14 +318,13 @@ static int ipufb_probe(struct device_d *dev)
ret = of_property_read_string(node, "interface-pix-fmt", &fmt);
if (!ret) {
if (!strcmp(fmt, "rgb24"))
- fbi->interface_pix_fmt = V4L2_PIX_FMT_RGB24;
+ fbi->bus_format = MEDIA_BUS_FMT_RGB888_1X24;
else if (!strcmp(fmt, "rgb565"))
- fbi->interface_pix_fmt = V4L2_PIX_FMT_RGB565;
+ fbi->bus_format = MEDIA_BUS_FMT_RGB565_1X16;
else if (!strcmp(fmt, "bgr666"))
- fbi->interface_pix_fmt = V4L2_PIX_FMT_BGR666;
+ fbi->bus_format = MEDIA_BUS_FMT_RGB666_1X18;
else if (!strcmp(fmt, "lvds666"))
- fbi->interface_pix_fmt =
- v4l2_fourcc('L', 'V', 'D', '6');
+ fbi->bus_format = MEDIA_BUS_FMT_RGB666_1X24_CPADHI;
}
ret = vpl_ioctl(&fbi->vpl, 2 + fbi->dino, VPL_GET_VIDEOMODES, &info->modes);