Yes. I will send another patch later to fix the static variables.

Murali Karicheri
Software Design Engineer
Texas Instruments Inc.
Germantown, MD 20874
new phone: 301-407-9583
Old Phone : 301-515-3736 (will be deprecated)
email: m-kariche...@ti.com

>-----Original Message-----
>From: Hiremath, Vaibhav
>Sent: Monday, August 17, 2009 12:35 PM
>To: Karicheri, Muralidharan; linux-me...@vger.kernel.org
>Cc: davinci-linux-open-source@linux.davincidsp.com; hverk...@xs4all.nl
>Subject: RE: [PATCH v1 - 4/5] V4L : vpif updates for DM6467 vpif capture
>driver
>
>H Murali,
>
>> -----Original Message-----
>> From: Karicheri, Muralidharan
>> Sent: Monday, August 17, 2009 9:38 PM
>> To: Hiremath, Vaibhav; linux-me...@vger.kernel.org
>> Cc: davinci-linux-open-source@linux.davincidsp.com;
>> hverk...@xs4all.nl
>> Subject: RE: [PATCH v1 - 4/5] V4L : vpif updates for DM6467 vpif
>> capture driver
>>
>> Vaibhav,
>>
>> I don't see any serious issues raised here. I can send another patch
>> to fix this if needed.
>[Hiremath, Vaibhav] yes most of them are editorial, as I mentioned I just
>reviewed it quickly.
>
>But as far as static variables are concerned I still think we can avoid
>them completely, again it's not critical though.
>
>As I mentioned I will have to look for extern variables, how they have been
>used and stuff like that.
>As of now, I am ok if it gets merged.
>
>>
>> Regards,
>> Murali
>> >> +#include <linux/spinlock.h>
>> >>  #include <linux/kernel.h>
>> >> +#include <linux/io.h>
>> >[Hiremath, Vaibhav] You may want to put one line gap here.
>> Ok. Just editorial.
>> >> +#include <mach/hardware.h>
>> >>
>> >>  #include "vpif.h"
>> >>
>> >> @@ -31,6 +35,12 @@ MODULE_LICENSE("GPL");
>> >>  #define VPIF_CH2_MAX_MODES       (15)
>> >>  #define VPIF_CH3_MAX_MODES       (02)
>> >>
>> >> +static resource_size_t   res_len;
>> >> +static struct resource   *res;
>> >[Hiremath, Vaibhav] Do we really require this to be static
>> variable?
>> >I think we can manage it to be local variable.
>> Yes. We could. Probably change it with a new patch. Don't want to
>> hold up merge because of this.
>> >
>> >> +spinlock_t vpif_lock;
>> >> +
>> >> +void __iomem *vpif_base;
>> >> +
>> >>  static inline void vpif_wr_bit(u32 reg, u32 bit, u32 val)
>> >>  {
>> >>   if (val)
>> >> @@ -151,17 +161,17 @@ static void config_vpif_params(struct
>> >> vpif_params *vpifparams,
>> >>           else if (config->capture_format) {
>> >>                   /* Set the polarity of various pins */
>> >>                   vpif_wr_bit(reg, VPIF_CH_FID_POLARITY_BIT,
>> >> -                                 vpifparams-
>> >> >params.raw_params.fid_pol);
>> >> +                                 vpifparams->iface.fid_pol);
>> >>                   vpif_wr_bit(reg, VPIF_CH_V_VALID_POLARITY_BIT,
>> >> -                                 vpifparams->params.raw_params.vd_pol);
>> >> +                                 vpifparams->iface.vd_pol);
>> >>                   vpif_wr_bit(reg, VPIF_CH_H_VALID_POLARITY_BIT,
>> >> -                                 vpifparams->params.raw_params.hd_pol);
>> >> +                                 vpifparams->iface.hd_pol);
>> >>
>> >>                   value = regr(reg);
>> >>                   /* Set data width */
>> >>                   value &= ((~(unsigned int)(0x3)) <<
>> >>                                   VPIF_CH_DATA_WIDTH_BIT);
>> >> -                 value |= ((vpifparams->params.raw_params.data_sz)
>> >> <<
>> >> +                 value |= ((vpifparams->params.data_sz) <<
>> >>                                                VPIF_CH_DATA_WIDTH_BIT);
>> >>                   regw(value, reg);
>> >>           }
>> >> @@ -227,8 +237,60 @@ int vpif_channel_getfid(u8 channel_id)
>> >>  }
>> >>  EXPORT_SYMBOL(vpif_channel_getfid);
>> >>
>> >> -void vpif_base_addr_init(void __iomem *base)
>> >> +static int __init vpif_probe(struct platform_device *pdev)
>> >> +{
>> >> + int status = 0;
>> >> +
>> >> + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>> >> + if (!res)
>> >> +         return -ENOENT;
>> >> +
>> >> + res_len = res->end - res->start + 1;
>> >> +
>> >> + res = request_mem_region(res->start, res_len, res->name);
>> >> + if (!res)
>> >> +         return -EBUSY;
>> >> +
>> >> + vpif_base = ioremap(res->start, res_len);
>> >> + if (!vpif_base) {
>> >> +         status = -EBUSY;
>> >> +         goto fail;
>> >> + }
>> >> +
>> >> + spin_lock_init(&vpif_lock);
>> >> + dev_info(&pdev->dev, "vpif probe success\n");
>> >> + return 0;
>> >> +
>> >> +fail:
>> >> + release_mem_region(res->start, res_len);
>> >> + return status;
>> >> +}
>> >> +
>> >> +static int vpif_remove(struct platform_device *pdev)
>> >>  {
>> >> - vpif_base = base;
>> >> + iounmap(vpif_base);
>> >> + release_mem_region(res->start, res_len);
>> >> + return 0;
>> >>  }
>> >> -EXPORT_SYMBOL(vpif_base_addr_init);
>> >> +
>> >> +static struct platform_driver vpif_driver = {
>> >> + .driver = {
>> >> +         .name   = "vpif",
>> >> +         .owner = THIS_MODULE,
>> >> + },
>> >> + .remove = __devexit_p(vpif_remove),
>> >> + .probe = vpif_probe,
>> >> +};
>> >> +
>> >> +static void vpif_exit(void)
>> >> +{
>> >> + platform_driver_unregister(&vpif_driver);
>> >> +}
>> >> +
>> >> +static int __init vpif_init(void)
>> >> +{
>> >> + return platform_driver_register(&vpif_driver);
>> >> +}
>> >> +subsys_initcall(vpif_init);
>> >> +module_exit(vpif_exit);
>> >> +
>> >> diff --git a/drivers/media/video/davinci/vpif.h
>> >> b/drivers/media/video/davinci/vpif.h
>> >> index fca26dc..188841b 100644
>> >> --- a/drivers/media/video/davinci/vpif.h
>> >> +++ b/drivers/media/video/davinci/vpif.h
>> >> @@ -19,6 +19,7 @@
>> >>  #include <linux/io.h>
>> >>  #include <linux/videodev2.h>
>> >[Hiremath, Vaibhav] one line gap here.
>> Again editorial.
>> >>  #include <mach/hardware.h>
>> >> +#include <mach/dm646x.h>
>> >>
>> >>  /* Maximum channel allowed */
>> >>  #define VPIF_NUM_CHANNELS                (4)
>> >> @@ -26,7 +27,9 @@
>> >>  #define VPIF_DISPLAY_NUM_CHANNELS        (2)
>> >>
>> >>  /* Macros to read/write registers */
>> >> -static void __iomem *vpif_base;
>> >> +extern void __iomem *vpif_base;
>> >> +extern spinlock_t vpif_lock;
>> >[Hiremath, Vaibhav] I think I would want to check compete driver.
>> How these
>> >extern variables have been used.
>> >
>> Let me know if you find some thing wrong in the driver. At this
>> time, I just don't see any issues with this.
>> >> +
>> >>  #define regr(reg)               readl((reg) + vpif_base)
>> >>  #define regw(value, reg)        writel(value, (reg + vpif_base))
>> >>
>> >> @@ -280,6 +283,10 @@ static inline void enable_channel1(int
>> enable)
>> >>  /* inline function to enable interrupt for channel0 */
>> >>  static inline void channel0_intr_enable(int enable)
>> >>  {
>> >> + unsigned long flags;
>> >> +
>> >> + spin_lock_irqsave(&vpif_lock, flags);
>> >> +
>> >>   if (enable) {
>> >>           regw((regr(VPIF_INTEN) | 0x10), VPIF_INTEN);
>> >>           regw((regr(VPIF_INTEN_SET) | 0x10), VPIF_INTEN_SET);
>> >> @@ -292,11 +299,16 @@ static inline void channel0_intr_enable(int
>> >> enable)
>> >>           regw((regr(VPIF_INTEN_SET) | VPIF_INTEN_FRAME_CH0),
>> >>                                                   VPIF_INTEN_SET);
>> >>   }
>> >> + spin_unlock_irqrestore(&vpif_lock, flags);
>> >>  }
>> >>
>> >>  /* inline function to enable interrupt for channel1 */
>> >>  static inline void channel1_intr_enable(int enable)
>> >>  {
>> >> + unsigned long flags;
>> >> +
>> >> + spin_lock_irqsave(&vpif_lock, flags);
>> >> +
>> >>   if (enable) {
>> >>           regw((regr(VPIF_INTEN) | 0x10), VPIF_INTEN);
>> >>           regw((regr(VPIF_INTEN_SET) | 0x10), VPIF_INTEN_SET);
>> >> @@ -309,6 +321,7 @@ static inline void channel1_intr_enable(int
>> >> enable)
>> >>           regw((regr(VPIF_INTEN_SET) | VPIF_INTEN_FRAME_CH1),
>> >>                                                   VPIF_INTEN_SET);
>> >>   }
>> >> + spin_unlock_irqrestore(&vpif_lock, flags);
>> >>  }
>> >>
>> >>  /* inline function to set buffer addresses in case of Y/C non
>> mux
>> >> mode */
>> >> @@ -431,6 +444,10 @@ static inline void enable_channel3(int
>> enable)
>> >>  /* inline function to enable interrupt for channel2 */
>> >>  static inline void channel2_intr_enable(int enable)
>> >>  {
>> >> + unsigned long flags;
>> >> +
>> >> + spin_lock_irqsave(&vpif_lock, flags);
>> >> +
>> >>   if (enable) {
>> >>           regw((regr(VPIF_INTEN) | 0x10), VPIF_INTEN);
>> >>           regw((regr(VPIF_INTEN_SET) | 0x10), VPIF_INTEN_SET);
>> >> @@ -442,11 +459,16 @@ static inline void channel2_intr_enable(int
>> >> enable)
>> >>           regw((regr(VPIF_INTEN_SET) | VPIF_INTEN_FRAME_CH2),
>> >>                                                   VPIF_INTEN_SET);
>> >>   }
>> >> + spin_unlock_irqrestore(&vpif_lock, flags);
>> >>  }
>> >>
>> >>  /* inline function to enable interrupt for channel3 */
>> >>  static inline void channel3_intr_enable(int enable)
>> >>  {
>> >> + unsigned long flags;
>> >> +
>> >> + spin_lock_irqsave(&vpif_lock, flags);
>> >> +
>> >>   if (enable) {
>> >>           regw((regr(VPIF_INTEN) | 0x10), VPIF_INTEN);
>> >>           regw((regr(VPIF_INTEN_SET) | 0x10), VPIF_INTEN_SET);
>> >> @@ -459,6 +481,7 @@ static inline void channel3_intr_enable(int
>> >> enable)
>> >>           regw((regr(VPIF_INTEN_SET) | VPIF_INTEN_FRAME_CH3),
>> >>                                                   VPIF_INTEN_SET);
>> >>   }
>> >> + spin_unlock_irqrestore(&vpif_lock, flags);
>> >>  }
>> >>
>> >>  /* inline function to enable raw vbi data for channel2 */
>> >> @@ -571,7 +594,7 @@ struct vpif_channel_config_params {
>> >>   v4l2_std_id stdid;
>> >>  };
>> >>
>> >> -struct vpif_interface;
>> >> +struct vpif_video_params;
>> >>  struct vpif_params;
>> >>  struct vpif_vbi_params;
>> >>
>> >> @@ -579,13 +602,6 @@ int vpif_set_video_params(struct vpif_params
>> >> *vpifparams, u8 channel_id);
>> >>  void vpif_set_vbi_display_params(struct vpif_vbi_params
>> *vbiparams,
>> >>                                                   u8 channel_id);
>> >>  int vpif_channel_getfid(u8 channel_id);
>> >> -void vpif_base_addr_init(void __iomem *base);
>> >> -
>> >> -/* Enumerated data types */
>> >> -enum vpif_capture_pinpol {
>> >> - VPIF_CAPTURE_PINPOL_SAME        = 0,
>> >> - VPIF_CAPTURE_PINPOL_INVERT      = 1
>> >> -};
>> >>
>> >>  enum data_size {
>> >>   _8BITS = 0,
>> >> @@ -593,13 +609,6 @@ enum data_size {
>> >>   _12BITS,
>> >>  };
>> >>
>> >> -struct vpif_capture_params_raw {
>> >> - enum data_size data_sz;
>> >> - enum vpif_capture_pinpol fid_pol;
>> >> - enum vpif_capture_pinpol vd_pol;
>> >> - enum vpif_capture_pinpol hd_pol;
>> >> -};
>> >> -
>> >>  /* Structure for vpif parameters for raw vbi data */
>> >>  struct vpif_vbi_params {
>> >>   __u32 hstart0;  /* Horizontal start of raw vbi data for first
>> >> field */
>> >> @@ -613,18 +622,19 @@ struct vpif_vbi_params {
>> >>  };
>> >>
>> >>  /* structure for vpif parameters */
>> >> -struct vpif_interface {
>> >> +struct vpif_video_params {
>> >>   __u8 storage_mode;      /* Indicates field or frame mode */
>> >>   unsigned long hpitch;
>> >>   v4l2_std_id stdid;
>> >>  };
>> >>
>> >>  struct vpif_params {
>> >> - struct vpif_interface video_params;
>> >> + struct vpif_interface iface;
>> >> + struct vpif_video_params video_params;
>> >>   struct vpif_channel_config_params std_info;
>> >>   union param {
>> >>           struct vpif_vbi_params  vbi_params;
>> >> -         struct vpif_capture_params_raw  raw_params;
>> >> +         enum data_size data_sz;
>> >>   } params;
>> >>  };
>> >>
>> >> --
>> >> 1.6.0.4
>> >>
>> >> --
>> >> To unsubscribe from this list: send the line "unsubscribe linux-
>> >> media" in
>> >> the body of a message to majord...@vger.kernel.org
>> >> More majordomo info at  http://vger.kernel.org/majordomo-
>> info.html

_______________________________________________
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to