Hi Arjan,

Thanks for your suggestion, I'll work out a patch to replace all dprintk().
Before that, I need to work on the 3 left (of total 5) critical camera patches, 
the middle-ware team are waiting for them to be integrated. Is that OK?

BTW, How can I set different debug levels using pr_debug and dev_dbg()?

Thanks,

-- Yong
Phone (+86) 21-61166334
Lab (+86) 21-61167881

> 
> -----Original Message-----
> From: Arjan van de Ven [mailto:ar...@linux.intel.com] 
> Sent: Saturday, June 18, 2011 12:12 AM
> To: He, Yong M
> Cc: meego-ker...@meego.com; Kristen Carlson Accardi
> Subject: [patch] mrstov5640: use linux debug print mechanism
> 
> Hi Yong,
> 
> one of the things that has been bugging me a bit lately is how much printk 
> spew the camera drivers give in dmesg; it's not a huge deal, just a minor 
> irritation, but it made me look into the source code.
> 
> the patch below tries to improve the camera debug functionality by using the 
> linux kernel standard debug mechanism (pr_debug and dev_dbg() ), which allows 
> for runtime tuning of the print/debug levels and also has the benefit of 
> working automatically well with diagnostic tools (because of a standard 
> leading format header).
> 
> Please review the patch and consider integrating it into your source code; I 
> think it makes the driver better and more of a linux driver.
> 
> 
> 
> From: Arjan van de Ven <ar...@linux.intel.com>
> Subject: mrstov5640: use linux debug print mechanism
> 
> The ov5640 driver invented its own dprintk() abstraction rather than 
> using the standard linux pr_debug/dev_dbg
> mechanism. This patch switches the driver to the standard mechanism, 
> which allows the debugging to be used
> by automatic analysis and diagnostic tools.
> 
> Signed-off-by: Arjan van de Ven <ar...@linux.intel.com>
> 
> 
> diff --git a/drivers/staging/mrstci/mrstov5640/mrstov5640.c 
> b/drivers/staging/mrstci/mrstov5640/mrstov5640.c
> index 375f609..b27f94e 100644
> --- a/drivers/staging/mrstci/mrstov5640/mrstov5640.c
> +++ b/drivers/staging/mrstci/mrstov5640/mrstov5640.c
> @@ -24,6 +24,8 @@
>    * Yong He <yong.m...@intel.com>
>    */
> 
> +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> +
>   #include <linux/module.h>
>   #include <linux/types.h>
>   #include <linux/kernel.h>
> @@ -50,10 +52,6 @@
> 
>   #define DRIVER_VERSION "0.942"
> 
> -static int mrstov5640_debug=5;
> -module_param(mrstov5640_debug, int, 0644);
> -MODULE_PARM_DESC(mrstov5640_debug, "Debug level (0-1)");
> -
>   #define GPIO_FLASH 45
>   static int ov5640_flash=0;
> 
> @@ -61,19 +59,8 @@ static int ov5640_flash=0;
>   #define V4L2_CID_FLASH_STROBE                   
> (V4L2_CID_CAMERA_CLASS_BASE+17)
>   #endif
> 
> -#define dprintk(level, fmt, arg...) do {            \
> -    if (mrstov5640_debug >= level)                     \
> -        printk(KERN_DEBUG "ov5640@%s: " fmt "\n", \
> -               __func__, ## arg); } \
> -    while (0)
> -
> -#define eprintk(fmt, arg...)    \
> -    printk(KERN_ERR "ov5640@%s: line %d: " fmt "\n",    \
> -           __func__, __LINE__, ## arg);
> -
> -#define DBG_entering    dprintk(2, "entering");
> -#define DBG_leaving    dprintk(2, "leaving");
> -#define DBG_line    dprintk(2, " line: %d", __LINE__);
> +#define DBG_entering    pr_debug("entering %s\n", __func__);
> +#define DBG_leaving    pr_debug("leaving %s\n", __func__);
> 
>   static inline struct ci_sensor_config *to_sensor_config(struct 
> v4l2_subdev *sd)
>   {
> @@ -244,7 +231,7 @@ static int ov5640_read(struct i2c_client *c, u16 
> reg, u8 *value)
>       *value = ret_val;
> 
>       ret = (ret == 2) ? 0 : -1;
> -    dprintk( 4, " && ov5640_read  \t\t\t(0x%04x) ------> 
> 0x%02x",reg,*value);
> +    dev_dbg(&c->adapter->dev, "ov5640_read  \t\t\t(0x%04x) ------> 
> 0x%02x\n", reg, *value);
>       return ret;
>   }
> 
> @@ -272,7 +259,7 @@ static int ov5640_write(struct i2c_client *c, u16 
> reg, u8 value)
>       if (reg == 0x3008 && (value & 0x80))
>           msleep(3);
>       ret = (ret == 1) ? 0 : -1;
> -    dprintk( 4, "&& ov5640_write \t\t\t(0x%04x) <------ 0x%02x",reg,value);
> +    dev_dbg(&c->adapter->dev, "ov5640_write \t\t\t(0x%04x) <------ 
> 0x%02x\n", reg, value);
>       return ret;
>   }
> 
> @@ -346,7 +333,7 @@ static int ov5640_hw_init (struct i2c_client *c)
> 
>       /* Set registers into default config value */
>       ret = ov5640_write_array(c, ov5640_def_reg);
> -    dprintk( 1, "[ov5640-wr-reg] <----------- load ov5640 default 
> settings\n");
> +    dev_dbg(&c->adapter->dev, "[ov5640-wr-reg] <----------- load ov5640 
> default settings\n");
>       /* turn on AGC/AEC */
>       ret += ov5640_write(c, 0x3503, 0x0);
>       ov5640_set_data_pin_in(c);
> @@ -377,22 +364,23 @@ static void ov5640_standby(struct v4l2_subdev *sd)
>           ov5640_status.reg_inited = OV5640_REG_RESET;
> 
>       spin_unlock_irqrestore(&ov5640_status.state_lock, flags);
> -    dprintk(1, "PM: ov5640 standby called\n");
> +    dev_dbg(&c->adapter->dev, "PM: ov5640 standby called\n");
>   }
> 
>   static void ov5640_wakeup(struct v4l2_subdev *sd, int hw_reinit)
>   {
>       unsigned long flags;
> -    dprintk(1, "PM: ov5640 wakeup called\n");
> +    struct i2c_client *c = v4l2_get_subdevdata(sd);
> +
> +    dev_dbg(&c->adapter->dev, "PM: ov5640 wakeup called\n");

We cannot use 'struct i2c_client *c' here, because when wakeup are firstly 
called, this c is not inited yet.
I think here we should use printk() directly to print out this important 
message.

>       spin_lock_irqsave(&ov5640_status.state_lock, flags);
> 
>       if (ov5640_status.power == OV5640_POWER_OFF) {
>           ov5640_status.power = OV5640_POWER_ON;
>           spin_unlock_irqrestore(&ov5640_status.state_lock, flags);
> -        dprintk(1, "PM: ov5640 switch OFF to ON.\n");
> +        dev_dbg(&c->adapter->dev, "PM: ov5640 switch OFF to ON.\n");
>           gpio_set_value(GPIO_STDBY_PIN, 0);
>           if (hw_reinit)    {
> -            struct i2c_client *c = v4l2_get_subdevdata(sd);
>               ov5640_hw_init(c);
>               ov5640_restore_hw_status(c);
>           }
> @@ -476,7 +464,7 @@ static int ov5640_try_res(u32 *w, u32 *h)
>       struct ov5640_res_struct *res_index, *p = NULL;
>       int dis, last_dis = ov5640_res->width + ov5640_res->height;
> 
> -    dprintk(1, "&&&&&  before %dx%d", *w, *h);
> +    pr_debug("&&&&&  before %dx%d", *w, *h);
>       for (res_index = ov5640_res;
>            res_index < ov5640_res + N_RES;
>            res_index++) {
> @@ -509,7 +497,7 @@ static int ov5640_try_res(u32 *w, u32 *h)
>       *w = res_index->width;
>       *h = res_index->height;
> 
> -    dprintk(1, "&&&&&  after %dx%d", *w, *h);
> +    pr_debug("&&&&&  after %dx%d", *w, *h);
>       return 0;
>   }
> 
> @@ -533,11 +521,13 @@ static int ov5640_try_fmt(struct v4l2_subdev *sd,
>                 struct v4l2_mbus_framefmt *fmt)
>   {
>       int ret = 0;
> +    struct i2c_client *c = v4l2_get_subdevdata(sd);
> +
>       DBG_entering;
> -    dprintk(1, "&&&&&  before %dx%d", fmt->width,
> +    dev_dbg(&c->adapter->dev, "&&&&&  before %dx%d", fmt->width,
>           fmt->height);
>       ret = ov5640_try_res(&fmt->width, &fmt->height);
> -    dprintk(1, "&&&&&  after %dx%d", fmt->width,
> +    dev_dbg(&c->adapter->dev, "&&&&&  after %dx%d", fmt->width,
>           fmt->height);
>       DBG_leaving;
>       return ret;
> @@ -648,8 +638,8 @@ static int ov5640_set_fmt(struct v4l2_subdev *sd,
>               ov5640_status.current_res_i = target_res_index;
>               spin_unlock_irqrestore(
> &ov5640_status.state_lock, flags);
> -            dprintk( 3, "[ov5640-wr-reg] <----------- changing res from 
> index-%d to index-%d (%dx%d)", ov5640_status.current_res_i, 
> target_res_index,width, height);
> -            dprintk( 3, "[ov5640-wr-reg] <----------- Set resolutiojn 
> Configs");
> +            dev_dbg(&client->adapter->dev, "[ov5640-wr-reg] 
> <----------- changing res from index-%d to index-%d (%dx%d)", 
> ov5640_status.current_res_i, target_res_index, width, height);
> +            dev_dbg(&client->adapter->dev, "[ov5640-wr-reg] 
> <----------- Set resolution Configs");
>               ov5640_save_hw_status(client);
>               ret += ov5640_write_array(client, res_index->regs);
>               ov5640_restore_hw_status(client);
> @@ -657,7 +647,7 @@ static int ov5640_set_fmt(struct v4l2_subdev *sd,
>           else {
>               spin_unlock_irqrestore(
> &ov5640_status.state_lock, flags);
> -            dprintk(3, "[ov5640-wr-reg] <----------- same res index-%d 
> (%dx%d)", target_res_index,width, height);
> +            dev_dbg(&client->adapter->dev, "[ov5640-wr-reg] 
> <----------- same res index-%d (%dx%d)", target_res_index, width, height);
>           }
> 
>           /* Marked current sensor res as being "used" */
> @@ -671,7 +661,7 @@ static int ov5640_set_fmt(struct v4l2_subdev *sd,
>           }
> 
>           for (index = 0; index < N_RES; index++)
> -            dprintk(2, "index = %d, used = %d\n", index,
> +            dev_dbg(&client->adapter->dev, "index = %d, used = %d\n", 
> index,
>                   ov5640_res[index].used);
> 
>       }
> @@ -1042,13 +1032,13 @@ static int ov5640_s_stream(struct v4l2_subdev 
> *sd, int enable)
>       struct i2c_client *client = v4l2_get_subdevdata(sd);
>       DBG_entering;
> 
> -    dprintk( 1, "[ov5640-wr-reg] <----------- ov5640: s_stream %d 
> \n",enable);
> +    dev_dbg(&client->adapter->dev, "[ov5640-wr-reg] <----------- 
> ov5640: s_stream %d\n", enable);
> 
>       if (enable) {
>           unsigned char v;
>           ov5640_read(client, 0x3008, &v);
>           if ((v & 0xff) != 0x02) {
> -            dprintk( 1, "[ov5640-wr-reg] <----------- set stream on, 
> sleep 300 ms for sensor adjusting...\n");
> +            dev_dbg(&client->adapter->dev, "[ov5640-wr-reg] 
> <----------- set stream on, sleep 300 ms for sensor adjusting...\n");
>               ov5640_write(client, 0x3008, 0x02);
>               msleep(300);
>           }
> @@ -1085,11 +1075,14 @@ static int ov5640_enum_frameintervals(struct 
> v4l2_subdev *sd,
>   {
>       unsigned int index = fival->index;
>       unsigned int res_index;
> +    struct i2c_client *client = v4l2_get_subdevdata(sd);
> +
> +
> 
>       DBG_entering;
> 
>       res_index = find_OV5640_res_index(fival->width, fival->height);
> -    dprintk( 1, "find res index %d (%dx%d)\n",res_index,fival->width, 
> fival->height);
> +    dev_dbg(&client->adapter->dev, "find res index %d (%dx%d)\n", 
> res_index, fival->width, fival->height);
> 
>       if (res_index >= N_RES)
>           return -EINVAL;
> @@ -1112,7 +1105,7 @@ static int ov5640_enum_frameintervals(struct 
> v4l2_subdev *sd,
>       fival->type = V4L2_FRMIVAL_TYPE_DISCRETE;
>       fival->discrete.numerator = 1;
>       fival->discrete.denominator = ov5640_res[res_index].fps[index];
> -    dprintk( 1, "find FPS index-%d 
> (%d)\n",index,fival->discrete.denominator);
> +    dev_dbg(&client->adapter->dev, "find FPS index-%d (%d)\n", index, 
> fival->discrete.denominator);
> 
>       DBG_leaving;
> 
> @@ -1133,7 +1126,7 @@ static int ov5640_s_parm(struct v4l2_subdev *sd, 
> struct v4l2_streamparm *param){
>               if (target_fps == 
> ov5640_res[ov5640_status.current_res_i].fps[fps_i]) {
>                   /* found the target fps*/
>                   u8 val;
> -                dprintk( 1, "set sensor FPS to %d\n", target_fps);
> +                dev_dbg(&client->adapter->dev, "set sensor FPS to 
> %d\n", target_fps);
>                   ov5640_read(client, 0x3008, &val);
>                   if (val == 0x02) ov5640_s_stream(sd, 0);
> 
> @@ -1146,12 +1139,12 @@ static int ov5640_s_parm(struct v4l2_subdev *sd, 
> struct v4l2_streamparm *param){
>               }
>           }
>           if (fps_i >= OV5640_N_FPS) {
> -            dprintk( 1, "Warning!! target FPS %d/%d is not found in 
> sensor supported table.\n",
> +            dev_dbg(&client->adapter->dev, "Warning!! target FPS %d/%d 
> is not found in sensor supported table.\n",
>                       param->parm.capture.timeperframe.denominator, 
> param->parm.capture.timeperframe.numerator);
>               return -EINVAL;
>           }
>       } else {
> -        dprintk( 1, "Warning!! current_res (%d) is not used??\n",
> +        dev_dbg(&client->adapter->dev, "Warning!! current_res (%d) is 
> not used??\n",
>                   ov5640_status.current_res_i);
>       }
> 
> @@ -1189,7 +1182,7 @@ static int ov5640_s_register(struct v4l2_subdev *sd,
>   {
>       struct i2c_client *client = v4l2_get_subdevdata(sd);
> 
> -    dprintk( 1, "[ov5640-wr-reg] <----------- ov5640_s_register 0x%04x 
> (0x%02x)\n",
> +    dev_dbg(&client->adapter->dev, "[ov5640-wr-reg] <----------- 
> ov5640_s_register 0x%04x (0x%02x)\n",
>               (unsigned int)(reg->reg & 0xffff),(unsigned int)(reg->val 
> & 0xff));
>       ov5640_write(client, reg->reg & 0xffff, reg->val & 0xff);
>       return 0;
> 
>
_______________________________________________
MeeGo-kernel mailing list
MeeGo-kernel@lists.meego.com
http://lists.meego.com/listinfo/meego-kernel

Reply via email to