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-karicheri2@xxxxxx >-----Original Message----- >From: Hiremath, Vaibhav >Sent: Monday, August 17, 2009 12:35 PM >To: Karicheri, Muralidharan; linux-media@xxxxxxxxxxxxxxx >Cc: davinci-linux-open-source@xxxxxxxxxxxxxxxxxxxx; hverkuil@xxxxxxxxx >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-media@xxxxxxxxxxxxxxx >> Cc: davinci-linux-open-source@xxxxxxxxxxxxxxxxxxxx; >> hverkuil@xxxxxxxxx >> 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 majordomo@xxxxxxxxxxxxxxx >> >> More majordomo info at http://vger.kernel.org/majordomo- >> info.html -- 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