Hi!

> > +   u32 min, max;
> > +
> > +   v4l2_ctrl_handler_init(&sensor->ctrl_handler, 4);
> > +
> > +   /* V4L2_CID_GAIN */
> > +   v4l2_ctrl_new_std(&sensor->ctrl_handler, &et8ek8_ctrl_ops,
> > +                     V4L2_CID_GAIN, 0, ARRAY_SIZE(et8ek8_gain_table) - 1,
> > +                     1, 0);
> > +
> > +   /* V4L2_CID_EXPOSURE */
> > +   min = et8ek8_exposure_rows_to_us(sensor, 1);
> > +   max = et8ek8_exposure_rows_to_us(sensor,
> > +                           sensor->current_reglist->mode.max_exp);
> 
> Haven't I suggested to use lines instead? I vaguely remember doing so...
> this would remove quite some code from the driver.

Do you have some more hints? I'll try to figure it out...

> > +#ifdef CONFIG_PM
> > +
> > +static int et8ek8_suspend(struct device *dev)
> 
> static int __maybe_unused ...
> 
> Please check the smiapp patches I just sent to the list. The smiapp driver
> had similar issues.

Ok, I guess I figured it out from other code (no network at the
moment).

> > +   if (sensor->power_count) {
> > +           gpiod_set_value(sensor->reset, 0);
> > +           clk_disable_unprepare(sensor->ext_clk);
> > +           sensor->power_count = 0;
> > +   }
> > +
> 
> You're missing v4l2_async_unregister_subdev() here.

Added.

> > +   v4l2_device_unregister_subdev(&sensor->subdev);
> > +   device_remove_file(&client->dev, &dev_attr_priv_mem);
> > +   v4l2_ctrl_handler_free(&sensor->ctrl_handler);
> > +   media_entity_cleanup(&sensor->subdev.entity);
> > +
> > +   return 0;
> > +}

> > +MODULE_DEVICE_TABLE(i2c, et8ek8_id_table);
> > +
> > +static const struct dev_pm_ops et8ek8_pm_ops = {
> > +   .suspend        = et8ek8_suspend,
> > +   .resume         = et8ek8_resume,
> 
> How about using  SET_SYSTEM_SLEEP_PM_OPS() here?

Ok, I guess that saves few lines.

> > +module_i2c_driver(et8ek8_i2c_driver);
> > +
> > +MODULE_AUTHOR("Sakari Ailus <sakari.ai...@iki.fi>");
> 
> You should put your name here as well. :-)
> 
> It's been a long time I even tried to use it. :-i

Me? Ok, I can list myself there, but I don't really know much about
that driver.

> > + * Contact: Sakari Ailus <sakari.ai...@iki.fi>
> > + *          Tuukka Toivonen <tuukka.o.toivo...@nokia.com>
> 
> Tuukka's e-mail is wrong here (the correct address is elsewhere in the
> patch).

Fixed.

Ok, these cleanups are here.

                                                                        Pavel

diff --git a/drivers/media/i2c/et8ek8/et8ek8_driver.c 
b/drivers/media/i2c/et8ek8/et8ek8_driver.c
index eb131b2..eb8c1b4 100644
--- a/drivers/media/i2c/et8ek8/et8ek8_driver.c
+++ b/drivers/media/i2c/et8ek8/et8ek8_driver.c
@@ -5,6 +5,7 @@
  *
  * Contact: Sakari Ailus <sakari.ai...@iki.fi>
  *          Tuukka Toivonen <tuukka...@gmail.com>
+ *          Pavel Machek <pa...@ucw.cz>
  *
  * Based on code from Toni Leinonen <toni.leino...@offcode.fi>.
  *
@@ -1435,9 +1436,7 @@ static const struct v4l2_subdev_internal_ops 
et8ek8_internal_ops = {
 /* --------------------------------------------------------------------------
  * I2C driver
  */
-#ifdef CONFIG_PM
-
-static int et8ek8_suspend(struct device *dev)
+static int __maybe_unused et8ek8_suspend(struct device *dev)
 {
        struct i2c_client *client = to_i2c_client(dev);
        struct v4l2_subdev *subdev = i2c_get_clientdata(client);
@@ -1449,7 +1448,7 @@ static int et8ek8_suspend(struct device *dev)
        return __et8ek8_set_power(sensor, false);
 }
 
-static int et8ek8_resume(struct device *dev)
+static int __maybe_unused et8ek8_resume(struct device *dev)
 {
        struct i2c_client *client = to_i2c_client(dev);
        struct v4l2_subdev *subdev = i2c_get_clientdata(client);
@@ -1461,13 +1460,6 @@ static int et8ek8_resume(struct device *dev)
        return __et8ek8_set_power(sensor, true);
 }
 
-#else
-
-#define et8ek8_suspend NULL
-#define et8ek8_resume NULL
-
-#endif /* CONFIG_PM */
-
 static int et8ek8_probe(struct i2c_client *client,
                        const struct i2c_device_id *devid)
 {
@@ -1542,6 +1534,7 @@ static int __exit et8ek8_remove(struct i2c_client *client)
        v4l2_device_unregister_subdev(&sensor->subdev);
        device_remove_file(&client->dev, &dev_attr_priv_mem);
        v4l2_ctrl_handler_free(&sensor->ctrl_handler);
+       v4l2_async_unregister_subdev(&sensor->subdev);
        media_entity_cleanup(&sensor->subdev.entity);
 
        return 0;
@@ -1559,8 +1552,7 @@ static const struct i2c_device_id et8ek8_id_table[] = {
 MODULE_DEVICE_TABLE(i2c, et8ek8_id_table);
 
 static const struct dev_pm_ops et8ek8_pm_ops = {
-       .suspend        = et8ek8_suspend,
-       .resume         = et8ek8_resume,
+       SET_SYSTEM_SLEEP_PM_OPS(et8ek8_suspend, et8ek8_resume)
 };
 
 static struct i2c_driver et8ek8_i2c_driver = {
@@ -1576,6 +1568,6 @@ static struct i2c_driver et8ek8_i2c_driver = {
 
 module_i2c_driver(et8ek8_i2c_driver);
 
-MODULE_AUTHOR("Sakari Ailus <sakari.ai...@iki.fi>");
+MODULE_AUTHOR("Sakari Ailus <sakari.ai...@iki.fi>, Pavel Machek 
<pa...@ucw.cz");
 MODULE_DESCRIPTION("Toshiba ET8EK8 camera sensor driver");
 MODULE_LICENSE("GPL");


-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) 
http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

Attachment: signature.asc
Description: Digital signature

Reply via email to