On Sat, Nov 27, 2010 at 20:52:14, Muralidharan Karicheri wrote:
> > +static int dm644x_set_if_config(enum v4l2_mbus_pixelcode pixcode) {
> > + unsigned int val = 0;
> > + int ret = 0;
> > +
> > + switch (pixcode) {
> > + case V4L2_MBUS_FMT_FIXED:
> > + /* Analog out.do nothing */
> > + break;
> > + case V4L2_MBUS_FMT_YUYV8_2X8:
> > + /* BT656 */
> > + val = (1<<12);
> > + /*set VDMD in VMOD */
> > + dm644x_reg_modify(venc_vmod_reg, val, (7 << 12));
> > + /* Set YCCTL */
> > + dm644x_reg_modify(venc_ycctl_reg, 1, 1);
> > + break;
> > + case V4L2_MBUS_FMT_YUYV10_1X20:
> > + /* This was VPBE_DIGITAL_IF_YCC16.BT656.Replace the enum
> > +accordingly
> > + * when the right one gets into open source */
> > + val = 0 << 12;
> > + dm644x_reg_modify(venc_vmod_reg, val, (7 << 12));
> > + dm644x_reg_modify(venc_ycctl_reg, 1, 1);
> > + break;
> > + case V4L2_MBUS_FMT_SGRBG8_1X8:
> > + /* This was VPBE_DIGITAL_IF_PRGB/SRGB.Replace the enum
> > +accordingly
> > + * when the right one gets into open source */
> > + val = 2 << 12;
> > + dm644x_reg_modify(venc_vmod_reg, val, (7 << 12));
> > + break;
> > + default:
> > + ret = -EINVAL;
> > + break;
> > + }
> > + return ret;
> > +}
>
> The media bus format was added to sub device interface sometime back to
> >configure the media data format (8 bit, 16 bit etc) and there is also a set
> >of APIs to set the pad configuration (done by Laurent) which is being
> >reviewed. In the context of that, I believe the venc VMOD configuration can
> >be handled by implementing s_mbus_fmt() sub device API at venc. Currently
> >OSD sub device has set_layer_config() which consists of setting the pixel
> >format, frame format and sub-frame(crop). I think this can be replaced by
> >s_mbus_fmt(). So on a board file, we could define the pad configuration
> >which will include the mbus code such as V4L2_MBUS_FMT_YUYV8_2X8 + addition
> >pad configurations such as embedded sync enabled etc. So once sub device is
> >selected, vpbe controller will set the pad configuration (obtained from
> >board file for each of the ?). The pad in this case is the link between
> >venc lcd port to external encoder. When S_FMT/S_CROP is called on the video
> >node, the controller calls s_mbus_fmt() on the osd and venc sub device to
> >set the mbus formats.
[Manju] I changed the implementation currently only with the view of reducing
the privately defined enumerations which was one of the comments by Hans. I am
following Laurent's patch series, and it is a good idea to get to s_mbus_fmt
when it gets in. Till then we can keep this. In the same regard, I asked
Laurent to suggest the correct enums for the RGB666 interfaces. I have no
problem in removing this call now and re-introducing it as part of next patch
series. I hope by that time Laurent's patch would get in too.
>
> Since the external encoder support is a TBD, I am okay if you implement this
> after this patch series is merged to the tree.
>
> Murali
> > +
> > +static u64 vpbe_display_dma_mask = DMA_BIT_MASK(32);
> > +
> > +static struct resource dm644x_v4l2_disp_resources[] = {
> > + {
> > + .start = IRQ_VENCINT,
> > + .end = IRQ_VENCINT,
> > + .flags = IORESOURCE_IRQ,
> > + },
> > + {
> > + .start = 0x01C72400,
> > + .end = 0x01C72400 + 0x180,
> > + .flags = IORESOURCE_MEM,
> > + },
> > +
> > +};
> > +static struct platform_device vpbe_v4l2_display = {
> > + .name = "vpbe-v4l2",
> > + .id = -1,
> > + .num_resources = ARRAY_SIZE(dm644x_v4l2_disp_resources),
> > + .resource = dm644x_v4l2_disp_resources,
> > + .dev = {
> > + .dma_mask = &vpbe_display_dma_mask,
> > + .coherent_dma_mask = DMA_BIT_MASK(32),
> > + },
> > +};
> > +struct venc_platform_data dm644x_venc_pdata = {
> > + .venc_type = DM644X_VPBE,
> > + .setup_pinmux = dm644x_vpbe_setup_pinmux,
> > + .setup_clock = dm644x_venc_setup_clock,
> > + .setup_if_config = dm644x_set_if_config, };
> > +
> > +static struct platform_device dm644x_venc_dev = {
> > + .name = VPBE_VENC_SUBDEV_NAME,
> > + .id = -1,
> > + .num_resources = ARRAY_SIZE(dm644x_venc_resources),
> > + .resource = dm644x_venc_resources,
> > + .dev = {
> > + .dma_mask = &dm644x_venc_dma_mask,
> > + .coherent_dma_mask = DMA_BIT_MASK(32),
> > + .platform_data = (void *)&dm644x_venc_pdata,
> > + },
> > +};
> > +
> > +static u64 dm644x_vpbe_dma_mask = DMA_BIT_MASK(32);
> > +
> > +static struct platform_device dm644x_vpbe_dev = {
> > + .name = "vpbe_controller",
> > + .id = -1,
> > + .dev = {
> > + .dma_mask = &dm644x_vpbe_dma_mask,
> > + .coherent_dma_mask = DMA_BIT_MASK(32),
> > + },
> > +};
> > +
> > +void dm644x_set_vpbe_display_config(struct vpbe_display_config *cfg)
> > +{
> > + dm644x_vpbe_dev.dev.platform_data = cfg; }
> > +
> >
> > /*--------------------------------------------------------------------
> > --*/
> >
> > static struct map_desc dm644x_io_desc[] = { @@ -767,20 +977,36 @@
> > void __init dm644x_init(void)
> > davinci_common_init(&davinci_soc_info_dm644x);
> > }
> >
> > +static struct platform_device *dm644x_video_devices[] __initdata = {
> > + &dm644x_vpss_device,
> > + &dm644x_ccdc_dev,
> > + &vpfe_capture_dev,
> > + &dm644x_osd_dev,
> > + &dm644x_venc_dev,
> > + &dm644x_vpbe_dev,
> > + &vpbe_v4l2_display,
> > +};
> > +
> > +static int __init dm644x_init_video(void) {
> > + /* Add ccdc clock aliases */
> > + clk_add_alias("master", dm644x_ccdc_dev.name, "vpss_master",
> > +NULL);
> > + clk_add_alias("slave", dm644x_ccdc_dev.name, "vpss_slave",
> > +NULL);
> > + vpss_clkctl_reg = ioremap_nocache(VPSS_CLKCTL, 4);
> > + platform_add_devices(dm644x_video_devices,
> > + ARRAY_SIZE(dm644x_video_devices));
> > + return 0;
> > +}
> > +
> > static int __init dm644x_init_devices(void)
> > {
> > if (!cpu_is_davinci_dm644x())
> > return 0;
> >
> > /* Add ccdc clock aliases */
> > - clk_add_alias("master", dm644x_ccdc_dev.name, "vpss_master",
> > NULL);
> > - clk_add_alias("slave", dm644x_ccdc_dev.name, "vpss_slave",
> > NULL);
> > platform_device_register(&dm644x_edma_device);
> > platform_device_register(&dm644x_emac_device);
> > - platform_device_register(&dm644x_vpss_device);
> > - platform_device_register(&dm644x_ccdc_dev);
> > - platform_device_register(&vpfe_capture_dev);
> > -
> > + dm644x_init_video();
> > return 0;
> > }
> > postcore_initcall(dm644x_init_devices);
> > diff --git a/arch/arm/mach-davinci/include/mach/dm644x.h
> > b/arch/arm/mach-davinci/include/mach/dm644x.h
> > index 6fca568..bf7adcd 100644
> > --- a/arch/arm/mach-davinci/include/mach/dm644x.h
> > +++ b/arch/arm/mach-davinci/include/mach/dm644x.h
> > @@ -26,6 +26,9 @@
> > #include <mach/hardware.h>
> > #include <mach/asp.h>
> > #include <media/davinci/vpfe_capture.h>
> > +#include <media/davinci/vpbe_types.h> #include <media/davinci/vpbe.h>
> > +#include <media/davinci/vpss.h>
> >
> > #define DM644X_EMAC_BASE (0x01C80000)
> > #define DM644X_EMAC_CNTRL_OFFSET (0x0000) @@ -43,5 +46,6 @@
> > void __init dm644x_init(void);
> > void __init dm644x_init_asp(struct snd_platform_data *pdata);
> > void dm644x_set_vpfe_config(struct vpfe_config *cfg);
> > +void dm644x_set_vpbe_display_config(struct vpbe_display_config *cfg);
> >
> > #endif /* __ASM_ARCH_DM644X_H */
> > --
> > 1.6.2.4
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-media" in
> > the body of a message to [email protected]
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
> >
>
>
>
> --
> Murali Karicheri
> [email protected]
>
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source