RE: [PATCH v2 5/6] davinci vpbe: platform specific additions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> >
> 
> 
> 
> -- 
> Murali Karicheri
> mkaricheri@xxxxxxxxx
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux