Lines Matching refs:gcam

183 #define gcam_dbg(gcam, format...)	dev_dbg(&gcam->bundle->dev, format)
184 #define gcam_info(gcam, format...) dev_info(&gcam->bundle->dev, format)
185 #define gcam_err(gcam, format...) dev_err(&gcam->bundle->dev, format)
222 static int gb_camera_get_max_pkt_size(struct gb_camera *gcam,
235 gcam_err(gcam, "unsupported greybus image format: %d\n",
244 gcam_err(gcam,
253 gcam_err(gcam,
270 static const int gb_camera_configure_streams_validate_response(struct gb_camera *gcam,
278 gcam_err(gcam, "response padding != 0\n");
283 gcam_err(gcam, "got #streams %u > request %u\n",
292 gcam_err(gcam, "stream #%u padding != 0\n", i);
304 static int gb_camera_set_intf_power_mode(struct gb_camera *gcam, u8 intf_id,
307 struct gb_svc *svc = gcam->connection->hd->svc;
335 static int gb_camera_set_power_mode(struct gb_camera *gcam, bool hs)
337 struct gb_interface *intf = gcam->connection->intf;
338 struct gb_svc *svc = gcam->connection->hd->svc;
341 ret = gb_camera_set_intf_power_mode(gcam, intf->interface_id, hs);
343 gcam_err(gcam, "failed to set module interface to %s (%d)\n",
348 ret = gb_camera_set_intf_power_mode(gcam, svc->ap_intf_id, hs);
350 gb_camera_set_intf_power_mode(gcam, intf->interface_id, !hs);
351 gcam_err(gcam, "failed to set AP interface to %s (%d)\n",
379 static int gb_camera_setup_data_connection(struct gb_camera *gcam,
392 conn = gb_connection_create_offloaded(gcam->bundle, gcam->data_cport_id,
398 gcam->data_connection = conn;
399 gb_connection_set_data(conn, gcam);
406 ret = gb_camera_set_power_mode(gcam, true);
427 ret = gb_camera_get_max_pkt_size(gcam, resp);
434 ret = gb_hd_output(gcam->connection->hd, &csi_cfg,
438 gcam_err(gcam, "failed to start the CSI transmitter\n");
450 gb_camera_set_power_mode(gcam, false);
452 gb_connection_disable(gcam->data_connection);
454 gb_connection_destroy(gcam->data_connection);
455 gcam->data_connection = NULL;
459 static void gb_camera_teardown_data_connection(struct gb_camera *gcam)
468 ret = gb_hd_output(gcam->connection->hd, &csi_cfg,
473 gcam_err(gcam, "failed to stop the CSI transmitter\n");
476 gb_camera_set_power_mode(gcam, false);
479 gb_connection_disable(gcam->data_connection);
480 gb_connection_destroy(gcam->data_connection);
481 gcam->data_connection = NULL;
488 static int gb_camera_capabilities(struct gb_camera *gcam,
493 ret = gb_pm_runtime_get_sync(gcam->bundle);
497 mutex_lock(&gcam->mutex);
499 if (!gcam->connection) {
504 ret = gb_camera_operation_sync_flags(gcam->connection,
510 gcam_err(gcam, "failed to retrieve capabilities: %d\n", ret);
513 mutex_unlock(&gcam->mutex);
515 gb_pm_runtime_put_autosuspend(gcam->bundle);
520 static int gb_camera_configure_streams(struct gb_camera *gcam,
561 mutex_lock(&gcam->mutex);
563 ret = gb_pm_runtime_get_sync(gcam->bundle);
567 if (!gcam->connection) {
572 ret = gb_camera_operation_sync_flags(gcam->connection,
580 ret = gb_camera_configure_streams_validate_response(gcam, resp,
604 if (gcam->state == GB_CAMERA_STATE_CONFIGURED) {
605 gb_camera_teardown_data_connection(gcam);
606 gcam->state = GB_CAMERA_STATE_UNCONFIGURED;
615 gb_pm_runtime_put_noidle(gcam->bundle);
625 gb_pm_runtime_get_noresume(gcam->bundle);
628 ret = gb_camera_setup_data_connection(gcam, resp, csi_params);
631 gb_operation_sync(gcam->connection,
637 gb_pm_runtime_put_noidle(gcam->bundle);
641 gcam->state = GB_CAMERA_STATE_CONFIGURED;
644 gb_pm_runtime_put_autosuspend(gcam->bundle);
647 mutex_unlock(&gcam->mutex);
653 static int gb_camera_capture(struct gb_camera *gcam, u32 request_id,
675 mutex_lock(&gcam->mutex);
677 if (!gcam->connection) {
682 ret = gb_operation_sync(gcam->connection, GB_CAMERA_TYPE_CAPTURE,
685 mutex_unlock(&gcam->mutex);
692 static int gb_camera_flush(struct gb_camera *gcam, u32 *request_id)
697 mutex_lock(&gcam->mutex);
699 if (!gcam->connection) {
704 ret = gb_operation_sync(gcam->connection, GB_CAMERA_TYPE_FLUSH, NULL, 0,
714 mutex_unlock(&gcam->mutex);
721 struct gb_camera *gcam = gb_connection_get_data(op->connection);
726 gcam_err(gcam, "Unsupported unsolicited event: %u\n", op->type);
733 gcam_err(gcam, "Wrong event size received (%zu < %zu)\n",
740 gcam_dbg(gcam, "received metadata for request %u, frame %u, stream %u\n",
773 struct gb_camera *gcam = priv;
777 ret = gb_camera_capabilities(gcam, data, &capabilities_len);
788 struct gb_camera *gcam = priv;
812 ret = gb_camera_configure_streams(gcam, &gb_nstreams,
846 struct gb_camera *gcam = priv;
848 return gb_camera_capture(gcam, request_id, streams, num_frames,
854 struct gb_camera *gcam = priv;
856 return gb_camera_flush(gcam, request_id);
870 static ssize_t gb_camera_debugfs_capabilities(struct gb_camera *gcam,
874 &gcam->debugfs.buffers[GB_CAMERA_DEBUGFS_BUFFER_CAPABILITIES];
884 ret = gb_camera_capabilities(gcam, caps, &size);
906 static ssize_t gb_camera_debugfs_configure_streams(struct gb_camera *gcam,
910 &gcam->debugfs.buffers[GB_CAMERA_DEBUGFS_BUFFER_STREAMS];
975 ret = gb_camera_configure_streams(gcam, &nstreams, &flags, streams,
1000 static ssize_t gb_camera_debugfs_capture(struct gb_camera *gcam,
1033 ret = gb_camera_capture(gcam, request_id, streams_mask, num_frames, 0,
1041 static ssize_t gb_camera_debugfs_flush(struct gb_camera *gcam,
1045 &gcam->debugfs.buffers[GB_CAMERA_DEBUGFS_BUFFER_FLUSH];
1049 ret = gb_camera_flush(gcam, &req_id);
1062 ssize_t (*execute)(struct gb_camera *gcam, char *buf, size_t len);
1093 struct gb_camera *gcam = file_inode(file)->i_private;
1099 ret = op->execute(gcam, NULL, 0);
1104 buffer = &gcam->debugfs.buffers[op->buffer];
1115 struct gb_camera *gcam = file_inode(file)->i_private;
1126 ret = op->execute(gcam, kbuf, len);
1156 static int gb_camera_debugfs_init(struct gb_camera *gcam)
1158 struct gb_connection *connection = gcam->connection;
1166 gcam->bundle->id);
1168 gcam->debugfs.root = debugfs_create_dir(dirname, gb_debugfs_get());
1170 gcam->debugfs.buffers =
1172 sizeof(*gcam->debugfs.buffers)));
1173 if (!gcam->debugfs.buffers)
1180 gcam->debugfs.buffers[i].length = 0;
1183 gcam->debugfs.root, gcam,
1190 static void gb_camera_debugfs_cleanup(struct gb_camera *gcam)
1192 debugfs_remove_recursive(gcam->debugfs.root);
1194 vfree(gcam->debugfs.buffers);
1201 static void gb_camera_cleanup(struct gb_camera *gcam)
1203 gb_camera_debugfs_cleanup(gcam);
1205 mutex_lock(&gcam->mutex);
1206 if (gcam->data_connection) {
1207 gb_connection_disable(gcam->data_connection);
1208 gb_connection_destroy(gcam->data_connection);
1209 gcam->data_connection = NULL;
1212 if (gcam->connection) {
1213 gb_connection_disable(gcam->connection);
1214 gb_connection_destroy(gcam->connection);
1215 gcam->connection = NULL;
1217 mutex_unlock(&gcam->mutex);
1231 struct gb_camera *gcam;
1262 gcam = kzalloc(sizeof(*gcam), GFP_KERNEL);
1263 if (!gcam)
1266 mutex_init(&gcam->mutex);
1268 gcam->bundle = bundle;
1269 gcam->state = GB_CAMERA_STATE_UNCONFIGURED;
1270 gcam->data_cport_id = data_cport_id;
1279 gcam->connection = conn;
1280 gb_connection_set_data(conn, gcam);
1286 ret = gb_camera_debugfs_init(gcam);
1290 gcam->module.priv = gcam;
1291 gcam->module.ops = &gb_cam_ops;
1292 gcam->module.interface_id = gcam->connection->intf->interface_id;
1293 gcam->module.release = gb_camera_release_module;
1294 ret = gb_camera_register(&gcam->module);
1298 greybus_set_drvdata(bundle, gcam);
1300 gb_pm_runtime_put_autosuspend(gcam->bundle);
1305 gb_camera_cleanup(gcam);
1306 kfree(gcam);
1312 struct gb_camera *gcam = greybus_get_drvdata(bundle);
1319 gb_camera_cleanup(gcam);
1320 gb_camera_unregister(&gcam->module);
1332 struct gb_camera *gcam = greybus_get_drvdata(bundle);
1334 if (gcam->data_connection)
1335 gb_connection_disable(gcam->data_connection);
1337 gb_connection_disable(gcam->connection);
1345 struct gb_camera *gcam = greybus_get_drvdata(bundle);
1348 ret = gb_connection_enable(gcam->connection);
1350 gcam_err(gcam, "failed to enable connection: %d\n", ret);
1354 if (gcam->data_connection) {
1355 ret = gb_connection_enable(gcam->data_connection);
1357 gcam_err(gcam,