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

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

 



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 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