Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c54ae8fe authored by Koji Matsuoka's avatar Koji Matsuoka Committed by Mauro Carvalho Chehab
Browse files

[media] soc_camera: rcar_vin: Add ARGB8888 caputre format support



This patch adds ARGB8888 capture format support for R-Car Gen3.

Signed-off-by: default avatarKoji Matsuoka <koji.matsuoka.xm@renesas.com>
Signed-off-by: default avatarYoshihiro Kaneko <ykaneko0929@gmail.com>
Signed-off-by: default avatarGuennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 5d8d8db8
Loading
Loading
Loading
Loading
+29 −10
Original line number Diff line number Diff line
@@ -124,7 +124,7 @@
#define VNDMR_EXRGB		(1 << 8)
#define VNDMR_BPSM		(1 << 4)
#define VNDMR_DTMD_YCSEP	(1 << 1)
#define VNDMR_DTMD_ARGB1555	(1 << 0)
#define VNDMR_DTMD_ARGB		(1 << 0)

/* Video n Data Mode Register 2 bits */
#define VNDMR2_VPS		(1 << 30)
@@ -643,21 +643,26 @@ static int rcar_vin_setup(struct rcar_vin_priv *priv)
		output_is_yuv = true;
		break;
	case V4L2_PIX_FMT_RGB555X:
		dmr = VNDMR_DTMD_ARGB1555;
		dmr = VNDMR_DTMD_ARGB;
		break;
	case V4L2_PIX_FMT_RGB565:
		dmr = 0;
		break;
	case V4L2_PIX_FMT_RGB32:
		if (priv->chip == RCAR_GEN2 || priv->chip == RCAR_H1 ||
		    priv->chip == RCAR_E1) {
		if (priv->chip != RCAR_GEN2 && priv->chip != RCAR_H1 &&
		    priv->chip != RCAR_E1)
			goto e_format;

		dmr = VNDMR_EXRGB;
		break;
		}
	case V4L2_PIX_FMT_ARGB32:
		if (priv->chip != RCAR_GEN3)
			goto e_format;

		dmr = VNDMR_EXRGB | VNDMR_DTMD_ARGB;
		break;
	default:
		dev_warn(icd->parent, "Invalid fourcc format (0x%x)\n",
			 icd->current_fmt->host_fmt->fourcc);
		return -EINVAL;
		goto e_format;
	}

	/* Always update on field change */
@@ -679,6 +684,11 @@ static int rcar_vin_setup(struct rcar_vin_priv *priv)
	iowrite32(vnmc | VNMC_ME, priv->base + VNMC_REG);

	return 0;

e_format:
	dev_warn(icd->parent, "Invalid fourcc format (0x%x)\n",
		 icd->current_fmt->host_fmt->fourcc);
	return -EINVAL;
}

static void rcar_vin_capture(struct rcar_vin_priv *priv)
@@ -1304,6 +1314,14 @@ static const struct soc_mbus_pixelfmt rcar_vin_formats[] = {
		.order			= SOC_MBUS_ORDER_LE,
		.layout			= SOC_MBUS_LAYOUT_PACKED,
	},
	{
		.fourcc			= V4L2_PIX_FMT_ARGB32,
		.name			= "ARGB8888",
		.bits_per_sample	= 32,
		.packing		= SOC_MBUS_PACKING_NONE,
		.order			= SOC_MBUS_ORDER_LE,
		.layout			= SOC_MBUS_LAYOUT_PACKED,
	},
};

static int rcar_vin_get_formats(struct soc_camera_device *icd, unsigned int idx,
@@ -1611,6 +1629,7 @@ static int rcar_vin_set_fmt(struct soc_camera_device *icd,
	case V4L2_PIX_FMT_RGB32:
		can_scale = priv->chip != RCAR_E1;
		break;
	case V4L2_PIX_FMT_ARGB32:
	case V4L2_PIX_FMT_UYVY:
	case V4L2_PIX_FMT_YUYV:
	case V4L2_PIX_FMT_RGB565: