Resending the reply with proper indentation..
On Mon, Nov 29, 2010 at 21:27:39, Hadli, Manjunath wrote:
> 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