Commit 142b21fe authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Greg Kroah-Hartman
Browse files

greybus: camera: Configure the bridge CSI transmitter



Start or stop the CSI transmitter when configuring and unconfiguring the
streams respectively. The CSI configuration parameters are currently
hardcoded.

Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 8e2b7daa
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
#include <linux/uaccess.h>
#include <linux/vmalloc.h>

#include "es2.h"
#include "greybus.h"
#include "greybus_protocols.h"

@@ -79,6 +80,7 @@ static int gb_camera_configure_streams(struct gb_camera *gcam,
{
	struct gb_camera_configure_streams_request *req;
	struct gb_camera_configure_streams_response *resp;
	struct es2_ap_csi_config csi_cfg;
	unsigned int i;
	size_t req_size;
	size_t resp_size;
@@ -146,6 +148,27 @@ static int gb_camera_configure_streams(struct gb_camera *gcam,
		}
	}

	/* Configure the CSI transmitter. Hardcode the parameters for now. */
	if (nstreams && !(resp->flags & GB_CAMERA_CONFIGURE_STREAMS_ADJUSTED)) {
		csi_cfg.csi_id = 1;
		csi_cfg.clock_mode = 0;
		csi_cfg.num_lanes = 2;
		csi_cfg.bus_freq = 250000000;

		ret = es2_ap_csi_setup(gcam->connection->hd, true, &csi_cfg);
	} else if (nstreams == 0) {
		csi_cfg.csi_id = 1;
		csi_cfg.clock_mode = 0;
		csi_cfg.num_lanes = 0;
		csi_cfg.bus_freq = 0;

		ret = es2_ap_csi_setup(gcam->connection->hd, false, &csi_cfg);
	}

	if (ret < 0)
		gcam_err(gcam, "failed to %s the CSI transmitter\n",
			 nstreams ? "start" : "stop");

	ret = resp->num_streams;

done: