diff options
Diffstat (limited to 'drivers/staging/greybus/camera.c')
-rw-r--r-- | drivers/staging/greybus/camera.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/drivers/staging/greybus/camera.c b/drivers/staging/greybus/camera.c index e862659a5ccc..722f2b4fe54d 100644 --- a/drivers/staging/greybus/camera.c +++ b/drivers/staging/greybus/camera.c @@ -38,6 +38,7 @@ struct gb_camera_debugfs_buffer { * @connection: the greybus connection for camera control * @data_connected: whether the data connection has been established * @debugfs: debugfs entries for camera protocol operations testing + * @module: Greybus camera module registered to HOST processor. */ struct gb_camera { struct gb_connection *connection; @@ -47,6 +48,8 @@ struct gb_camera { struct dentry *root; struct gb_camera_debugfs_buffer *buffers; } debugfs; + + struct gb_camera_module module; }; struct gb_camera_stream_config { @@ -504,16 +507,20 @@ static int gb_camera_op_flush(void *priv, u32 *request_id) return gb_camera_flush(priv, request_id); } -struct gb_camera_ops gb_cam_ops = { - .capabilities = gb_camera_op_capabilities, - .configure_streams = gb_camera_op_configure_streams, - .capture = gb_camera_op_capture, - .flush = gb_camera_op_flush, -}; - static int gb_camera_register_intf_ops(struct gb_camera *gcam) { - return gb_camera_register(&gb_cam_ops, gcam); + gcam->module.priv = gcam; + gcam->module.ops.capabilities = gb_camera_op_capabilities; + gcam->module.ops.configure_streams = gb_camera_op_configure_streams; + gcam->module.ops.capture = gb_camera_op_capture; + gcam->module.ops.flush = gb_camera_op_flush; + + return gb_camera_register(&gcam->module); +} + +static int gb_camera_unregister_intf_ops(struct gb_camera *gcam) +{ + return gb_camera_unregister(&gcam->module); } /* ----------------------------------------------------------------------------- @@ -931,6 +938,8 @@ static void gb_camera_connection_exit(struct gb_connection *connection) { struct gb_camera *gcam = connection->private; + gb_camera_unregister_intf_ops(gcam); + gb_camera_cleanup(gcam); } |