Commit 446091c9 authored by Jacopo Mondi's avatar Jacopo Mondi Committed by Greg Kroah-Hartman

greybus: camera: Add CSI configuration parameters

Add CSI configuration parameters to the configure_stream operation
response.
Currently, only the total number of lines in a second is used to configure the
the AP-Bridge CSI transmitter, all other parameters (number of CSI data
lanes, and CSI bus clock frequency) are kept hard-coded for two reasons:
1) We need to configure the CSI receiver on AP side accordingly to these
settings, before sending them to APB1 CSI transmitter.
2) We cannot use the camera module provided parameters as-is, but use
those information to compute the required bandwidth on the CSI bus, and
configure the # of CSI data lanes, and the CSI bus clock speed in a way that
satisfies that bandwidth requirement.
Signed-off-by: default avatarJacopo Mondi <jacopo.mondi@linaro.org>
Acked-by: default avatarLaurent Pinchart <laurent.pinchart@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 7f29aded
......@@ -162,6 +162,7 @@ struct ap_csi_config_request {
__u8 num_lanes;
__u8 padding;
__le32 bus_freq;
__le32 lines_per_second;
} __packed;
static int gb_camera_configure_streams(struct gb_camera *gcam,
......@@ -254,7 +255,14 @@ static int gb_camera_configure_streams(struct gb_camera *gcam,
if (ret < 0)
goto done;
/* Configure the CSI transmitter. Hardcode the parameters for now. */
/*
* Configure the APB1 CSI transmitter using the lines count reported by
* the camera module, but with hard-coded bus frequency and lanes number.
*
* TODO: use the clocking and size informations reported by camera module
* to compute the required CSI bandwidth, and configure the CSI receiver
* on AP side, and the CSI transmitter on APB1 side accordingly.
*/
memset(&csi_cfg, 0, sizeof(csi_cfg));
if (nstreams) {
......@@ -262,6 +270,7 @@ static int gb_camera_configure_streams(struct gb_camera *gcam,
csi_cfg.clock_mode = 0;
csi_cfg.num_lanes = 4;
csi_cfg.bus_freq = cpu_to_le32(960000000);
csi_cfg.lines_per_second = resp->lines_per_second;
ret = gb_hd_output(gcam->connection->hd, &csi_cfg,
sizeof(csi_cfg),
GB_APB_REQUEST_CSI_TX_CONTROL, false);
......
......@@ -1276,7 +1276,10 @@ struct gb_camera_configure_streams_response {
__u8 num_streams;
__u8 flags;
#define GB_CAMERA_CONFIGURE_STREAMS_ADJUSTED 0x01
__le16 padding;
__u8 num_lanes;
__u8 padding;
__le32 bus_freq;
__le32 lines_per_second;
struct gb_camera_stream_config_response config[0];
} __packed;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment