[media] marvell-cam: Allocate the i2c adapter in the platform driver
authorJonathan Corbet <corbet@lwn.net>
Sat, 11 Jun 2011 17:46:48 +0000 (14:46 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 27 Jul 2011 20:53:01 +0000 (17:53 -0300)
The upcoming mmp-camera driver will need an i2c_adapter structure allocated
externally, so change the core adapter to a pointer and require the
platform code to fill it in.

Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/marvell-ccic/cafe-driver.c
drivers/media/video/marvell-ccic/mcam-core.c
drivers/media/video/marvell-ccic/mcam-core.h

index 3dbc7e55499d05794e57d8ff1f0ee13acbd14f92..6a29cc1c45a530b4abc55a7bbb742579db808641 100644 (file)
@@ -334,9 +334,13 @@ static struct i2c_algorithm cafe_smbus_algo = {
 
 static int cafe_smbus_setup(struct cafe_camera *cam)
 {
-       struct i2c_adapter *adap = &cam->mcam.i2c_adapter;
+       struct i2c_adapter *adap;
        int ret;
 
+       adap = kzalloc(sizeof(*adap), GFP_KERNEL);
+       if (adap == NULL)
+               return -ENOMEM;
+       cam->mcam.i2c_adapter = adap;
        cafe_smbus_enable_irq(cam);
        adap->owner = THIS_MODULE;
        adap->algo = &cafe_smbus_algo;
@@ -351,7 +355,8 @@ static int cafe_smbus_setup(struct cafe_camera *cam)
 
 static void cafe_smbus_shutdown(struct cafe_camera *cam)
 {
-       i2c_del_adapter(&cam->mcam.i2c_adapter);
+       i2c_del_adapter(cam->mcam.i2c_adapter);
+       kfree(cam->mcam.i2c_adapter);
 }
 
 
index d5f18a300094d40c93b2ea7ab723e8aed311449a..014b70b5a9b8eafa882ee08c38e13fd23a68e91b 100644 (file)
@@ -1581,7 +1581,7 @@ int mccic_register(struct mcam_camera *cam)
        sensor_cfg.use_smbus = cam->use_smbus;
        cam->sensor_addr = ov7670_info.addr;
        cam->sensor = v4l2_i2c_new_subdev_board(&cam->v4l2_dev,
-                       &cam->i2c_adapter, &ov7670_info, NULL);
+                       cam->i2c_adapter, &ov7670_info, NULL);
        if (cam->sensor == NULL) {
                ret = -ENODEV;
                goto out_unregister;
index e8a7de05100b93bb671f5440e2c298932be4e2e1..5effa8203412e4fa6e36e8f9b3399ded2866b793 100644 (file)
@@ -37,7 +37,7 @@ struct mcam_camera {
         * These fields should be set by the platform code prior to
         * calling mcam_register().
         */
-       struct i2c_adapter i2c_adapter;
+       struct i2c_adapter *i2c_adapter;
        unsigned char __iomem *regs;
        spinlock_t dev_lock;
        struct device *dev; /* For messages, dma alloc */