mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-06 02:50:43 +00:00
greybus: camera: fix data-connection handling
Now that core supports offloaded connections, we can remove the hack that was used to setup the data connection. Note that offloaded-resource management may need to be refined later, but the current minimal implementation is enough to allow core to manage the connections (e.g. needed for proper connection tear down and power management). This will also allow the camera driver to be converted to a bundle driver. Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
parent
3b05d8508f
commit
3ba9fa5c92
1 changed files with 19 additions and 17 deletions
|
@ -42,7 +42,7 @@ struct gb_camera_debugfs_buffer {
|
|||
*/
|
||||
struct gb_camera {
|
||||
struct gb_connection *connection;
|
||||
bool data_connected;
|
||||
struct gb_connection *data_connection;
|
||||
|
||||
struct {
|
||||
struct dentry *root;
|
||||
|
@ -900,13 +900,9 @@ static void gb_camera_cleanup(struct gb_camera *gcam)
|
|||
{
|
||||
gb_camera_debugfs_cleanup(gcam);
|
||||
|
||||
if (gcam->data_connected) {
|
||||
struct gb_interface *intf = gcam->connection->intf;
|
||||
struct gb_svc *svc = gcam->connection->hd->svc;
|
||||
|
||||
gb_svc_connection_destroy(svc, intf->interface_id,
|
||||
ES2_APB_CDSI0_CPORT, svc->ap_intf_id,
|
||||
ES2_APB_CDSI1_CPORT);
|
||||
if (gcam->data_connection) {
|
||||
gb_connection_disable(gcam->data_connection);
|
||||
gb_connection_destroy(gcam->data_connection);
|
||||
}
|
||||
|
||||
kfree(gcam);
|
||||
|
@ -914,9 +910,9 @@ static void gb_camera_cleanup(struct gb_camera *gcam)
|
|||
|
||||
static int gb_camera_connection_init(struct gb_connection *connection)
|
||||
{
|
||||
struct gb_svc *svc = connection->hd->svc;
|
||||
struct gb_connection *data;
|
||||
struct gb_camera *gcam;
|
||||
u8 cport_flags;
|
||||
unsigned long data_flags;
|
||||
int ret;
|
||||
|
||||
gcam = kzalloc(sizeof(*gcam), GFP_KERNEL);
|
||||
|
@ -930,14 +926,20 @@ static int gb_camera_connection_init(struct gb_connection *connection)
|
|||
* Create the data connection between camera module CDSI0 and APB CDS1.
|
||||
* The CPort IDs are hardcoded by the ES2 bridges.
|
||||
*/
|
||||
cport_flags = GB_SVC_CPORT_FLAG_CSD_N | GB_SVC_CPORT_FLAG_CSV_N;
|
||||
ret = gb_svc_connection_create(svc, connection->intf->interface_id,
|
||||
ES2_APB_CDSI0_CPORT, svc->ap_intf_id,
|
||||
ES2_APB_CDSI1_CPORT, cport_flags);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
data_flags = GB_CONNECTION_FLAG_NO_FLOWCTRL | GB_CONNECTION_FLAG_CDSI1;
|
||||
|
||||
gcam->data_connected = true;
|
||||
data = gb_connection_create_offloaded(connection->bundle,
|
||||
ES2_APB_CDSI0_CPORT,
|
||||
data_flags);
|
||||
if (IS_ERR(data)) {
|
||||
ret = PTR_ERR(data);
|
||||
goto error;
|
||||
}
|
||||
gcam->data_connection = data;
|
||||
|
||||
ret = gb_connection_enable(data);
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
ret = gb_camera_debugfs_init(gcam);
|
||||
if (ret < 0)
|
||||
|
|
Loading…
Reference in a new issue