diff options
-rw-r--r-- | drivers/gpu/drm/drm_mipi_dsi.c | 89 | ||||
-rw-r--r-- | include/drm/drm_mipi_dsi.h | 6 |
2 files changed, 95 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c index 60177a3e16be..dcc15e161816 100644 --- a/drivers/gpu/drm/drm_mipi_dsi.c +++ b/drivers/gpu/drm/drm_mipi_dsi.c | |||
@@ -357,6 +357,95 @@ int mipi_dsi_set_maximum_return_packet_size(struct mipi_dsi_device *dsi, | |||
357 | EXPORT_SYMBOL(mipi_dsi_set_maximum_return_packet_size); | 357 | EXPORT_SYMBOL(mipi_dsi_set_maximum_return_packet_size); |
358 | 358 | ||
359 | /** | 359 | /** |
360 | * mipi_dsi_generic_write() - transmit data using a generic write packet | ||
361 | * @dsi: DSI peripheral device | ||
362 | * @payload: buffer containing the payload | ||
363 | * @size: size of payload buffer | ||
364 | * | ||
365 | * This function will automatically choose the right data type depending on | ||
366 | * the payload length. | ||
367 | * | ||
368 | * Return: The number of bytes transmitted on success or a negative error code | ||
369 | * on failure. | ||
370 | */ | ||
371 | ssize_t mipi_dsi_generic_write(struct mipi_dsi_device *dsi, const void *payload, | ||
372 | size_t size) | ||
373 | { | ||
374 | struct mipi_dsi_msg msg = { | ||
375 | .channel = dsi->channel, | ||
376 | .tx_buf = payload, | ||
377 | .tx_len = size | ||
378 | }; | ||
379 | |||
380 | switch (size) { | ||
381 | case 0: | ||
382 | msg.type = MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM; | ||
383 | break; | ||
384 | |||
385 | case 1: | ||
386 | msg.type = MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM; | ||
387 | break; | ||
388 | |||
389 | case 2: | ||
390 | msg.type = MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM; | ||
391 | break; | ||
392 | |||
393 | default: | ||
394 | msg.type = MIPI_DSI_GENERIC_LONG_WRITE; | ||
395 | break; | ||
396 | } | ||
397 | |||
398 | return mipi_dsi_device_transfer(dsi, &msg); | ||
399 | } | ||
400 | EXPORT_SYMBOL(mipi_dsi_generic_write); | ||
401 | |||
402 | /** | ||
403 | * mipi_dsi_generic_read() - receive data using a generic read packet | ||
404 | * @dsi: DSI peripheral device | ||
405 | * @params: buffer containing the request parameters | ||
406 | * @num_params: number of request parameters | ||
407 | * @data: buffer in which to return the received data | ||
408 | * @size: size of receive buffer | ||
409 | * | ||
410 | * This function will automatically choose the right data type depending on | ||
411 | * the number of parameters passed in. | ||
412 | * | ||
413 | * Return: The number of bytes successfully read or a negative error code on | ||
414 | * failure. | ||
415 | */ | ||
416 | ssize_t mipi_dsi_generic_read(struct mipi_dsi_device *dsi, const void *params, | ||
417 | size_t num_params, void *data, size_t size) | ||
418 | { | ||
419 | struct mipi_dsi_msg msg = { | ||
420 | .channel = dsi->channel, | ||
421 | .tx_len = num_params, | ||
422 | .tx_buf = params, | ||
423 | .rx_len = size, | ||
424 | .rx_buf = data | ||
425 | }; | ||
426 | |||
427 | switch (num_params) { | ||
428 | case 0: | ||
429 | msg.type = MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM; | ||
430 | break; | ||
431 | |||
432 | case 1: | ||
433 | msg.type = MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM; | ||
434 | break; | ||
435 | |||
436 | case 2: | ||
437 | msg.type = MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM; | ||
438 | break; | ||
439 | |||
440 | default: | ||
441 | return -EINVAL; | ||
442 | } | ||
443 | |||
444 | return mipi_dsi_device_transfer(dsi, &msg); | ||
445 | } | ||
446 | EXPORT_SYMBOL(mipi_dsi_generic_read); | ||
447 | |||
448 | /** | ||
360 | * mipi_dsi_dcs_write_buffer() - transmit a DCS command with payload | 449 | * mipi_dsi_dcs_write_buffer() - transmit a DCS command with payload |
361 | * @dsi: DSI peripheral device | 450 | * @dsi: DSI peripheral device |
362 | * @data: buffer containing data to be transmitted | 451 | * @data: buffer containing data to be transmitted |
diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h index 4a4e9d7ccc16..524655509cf1 100644 --- a/include/drm/drm_mipi_dsi.h +++ b/include/drm/drm_mipi_dsi.h | |||
@@ -155,6 +155,12 @@ int mipi_dsi_attach(struct mipi_dsi_device *dsi); | |||
155 | int mipi_dsi_detach(struct mipi_dsi_device *dsi); | 155 | int mipi_dsi_detach(struct mipi_dsi_device *dsi); |
156 | int mipi_dsi_set_maximum_return_packet_size(struct mipi_dsi_device *dsi, | 156 | int mipi_dsi_set_maximum_return_packet_size(struct mipi_dsi_device *dsi, |
157 | u16 value); | 157 | u16 value); |
158 | |||
159 | ssize_t mipi_dsi_generic_write(struct mipi_dsi_device *dsi, const void *payload, | ||
160 | size_t size); | ||
161 | ssize_t mipi_dsi_generic_read(struct mipi_dsi_device *dsi, const void *params, | ||
162 | size_t num_params, void *data, size_t size); | ||
163 | |||
158 | ssize_t mipi_dsi_dcs_write_buffer(struct mipi_dsi_device *dsi, | 164 | ssize_t mipi_dsi_dcs_write_buffer(struct mipi_dsi_device *dsi, |
159 | const void *data, size_t len); | 165 | const void *data, size_t len); |
160 | ssize_t mipi_dsi_dcs_write(struct mipi_dsi_device *dsi, u8 cmd, | 166 | ssize_t mipi_dsi_dcs_write(struct mipi_dsi_device *dsi, u8 cmd, |