diff options
author | Philipp Zabel <p.zabel@pengutronix.de> | 2012-05-23 11:08:19 -0400 |
---|---|---|
committer | Philipp Zabel <p.zabel@pengutronix.de> | 2014-06-04 05:07:12 -0400 |
commit | d6ca8ca7ec555bdd3372687d0d775c837a09ff6e (patch) | |
tree | 842b52a03721b61b82c556aa18c14dcf1162ecba | |
parent | 3f5a8a946d860b9022a23bf1ed5ab76f6fdd7e6e (diff) |
gpu: ipu-v3: Register the CSI modules
This patch registers the two CSI platform devices per IPU.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
-rw-r--r-- | drivers/gpu/ipu-v3/ipu-common.c | 37 | ||||
-rw-r--r-- | include/video/imx-ipu-v3.h | 1 |
2 files changed, 33 insertions, 5 deletions
diff --git a/drivers/gpu/ipu-v3/ipu-common.c b/drivers/gpu/ipu-v3/ipu-common.c index 1442b9e1cf8d..719788ce7d9f 100644 --- a/drivers/gpu/ipu-v3/ipu-common.c +++ b/drivers/gpu/ipu-v3/ipu-common.c | |||
@@ -1014,6 +1014,7 @@ static void platform_device_unregister_children(struct platform_device *pdev) | |||
1014 | struct ipu_platform_reg { | 1014 | struct ipu_platform_reg { |
1015 | struct ipu_client_platformdata pdata; | 1015 | struct ipu_client_platformdata pdata; |
1016 | const char *name; | 1016 | const char *name; |
1017 | int reg_offset; | ||
1017 | }; | 1018 | }; |
1018 | 1019 | ||
1019 | static const struct ipu_platform_reg client_reg[] = { | 1020 | static const struct ipu_platform_reg client_reg[] = { |
@@ -1035,13 +1036,29 @@ static const struct ipu_platform_reg client_reg[] = { | |||
1035 | .dma[1] = -EINVAL, | 1036 | .dma[1] = -EINVAL, |
1036 | }, | 1037 | }, |
1037 | .name = "imx-ipuv3-crtc", | 1038 | .name = "imx-ipuv3-crtc", |
1039 | }, { | ||
1040 | .pdata = { | ||
1041 | .csi = 0, | ||
1042 | .dma[0] = IPUV3_CHANNEL_CSI0, | ||
1043 | .dma[1] = -EINVAL, | ||
1044 | }, | ||
1045 | .reg_offset = IPU_CM_CSI0_REG_OFS, | ||
1046 | .name = "imx-ipuv3-camera", | ||
1047 | }, { | ||
1048 | .pdata = { | ||
1049 | .csi = 1, | ||
1050 | .dma[0] = IPUV3_CHANNEL_CSI1, | ||
1051 | .dma[1] = -EINVAL, | ||
1052 | }, | ||
1053 | .reg_offset = IPU_CM_CSI1_REG_OFS, | ||
1054 | .name = "imx-ipuv3-camera", | ||
1038 | }, | 1055 | }, |
1039 | }; | 1056 | }; |
1040 | 1057 | ||
1041 | static DEFINE_MUTEX(ipu_client_id_mutex); | 1058 | static DEFINE_MUTEX(ipu_client_id_mutex); |
1042 | static int ipu_client_id; | 1059 | static int ipu_client_id; |
1043 | 1060 | ||
1044 | static int ipu_add_client_devices(struct ipu_soc *ipu) | 1061 | static int ipu_add_client_devices(struct ipu_soc *ipu, unsigned long ipu_base) |
1045 | { | 1062 | { |
1046 | struct device *dev = ipu->dev; | 1063 | struct device *dev = ipu->dev; |
1047 | unsigned i; | 1064 | unsigned i; |
@@ -1055,9 +1072,19 @@ static int ipu_add_client_devices(struct ipu_soc *ipu) | |||
1055 | for (i = 0; i < ARRAY_SIZE(client_reg); i++) { | 1072 | for (i = 0; i < ARRAY_SIZE(client_reg); i++) { |
1056 | const struct ipu_platform_reg *reg = &client_reg[i]; | 1073 | const struct ipu_platform_reg *reg = &client_reg[i]; |
1057 | struct platform_device *pdev; | 1074 | struct platform_device *pdev; |
1058 | 1075 | struct resource res; | |
1059 | pdev = platform_device_register_data(dev, reg->name, | 1076 | |
1060 | id++, ®->pdata, sizeof(reg->pdata)); | 1077 | if (reg->reg_offset) { |
1078 | memset(&res, 0, sizeof(res)); | ||
1079 | res.flags = IORESOURCE_MEM; | ||
1080 | res.start = ipu_base + ipu->devtype->cm_ofs + reg->reg_offset; | ||
1081 | res.end = res.start + PAGE_SIZE - 1; | ||
1082 | pdev = platform_device_register_resndata(dev, reg->name, | ||
1083 | id++, &res, 1, ®->pdata, sizeof(reg->pdata)); | ||
1084 | } else { | ||
1085 | pdev = platform_device_register_data(dev, reg->name, | ||
1086 | id++, ®->pdata, sizeof(reg->pdata)); | ||
1087 | } | ||
1061 | 1088 | ||
1062 | if (IS_ERR(pdev)) | 1089 | if (IS_ERR(pdev)) |
1063 | goto err_register; | 1090 | goto err_register; |
@@ -1253,7 +1280,7 @@ static int ipu_probe(struct platform_device *pdev) | |||
1253 | if (ret) | 1280 | if (ret) |
1254 | goto failed_submodules_init; | 1281 | goto failed_submodules_init; |
1255 | 1282 | ||
1256 | ret = ipu_add_client_devices(ipu); | 1283 | ret = ipu_add_client_devices(ipu, ipu_base); |
1257 | if (ret) { | 1284 | if (ret) { |
1258 | dev_err(&pdev->dev, "adding client devices failed with %d\n", | 1285 | dev_err(&pdev->dev, "adding client devices failed with %d\n", |
1259 | ret); | 1286 | ret); |
diff --git a/include/video/imx-ipu-v3.h b/include/video/imx-ipu-v3.h index fe6053e6ae6d..61d6d25caf95 100644 --- a/include/video/imx-ipu-v3.h +++ b/include/video/imx-ipu-v3.h | |||
@@ -331,6 +331,7 @@ static inline void ipu_cpmem_set_burstsize(struct ipu_ch_param __iomem *p, | |||
331 | }; | 331 | }; |
332 | 332 | ||
333 | struct ipu_client_platformdata { | 333 | struct ipu_client_platformdata { |
334 | int csi; | ||
334 | int di; | 335 | int di; |
335 | int dc; | 336 | int dc; |
336 | int dp; | 337 | int dp; |