starfive: v4l2test: Support select connector to display for drm
Add -C param to select connector 0---inno hdmi 1---rgb hdmi or mipi dsi Signed-off-by: Jianlong Huang <jianlong.huang@starfivetech.com>
This commit is contained in:
@@ -107,8 +107,8 @@ static struct drm_dev_t *drm_find_dev(int fd, uint32_t width, uint32_t height)
|
||||
/* FIXME: use default encoder/crtc pair */
|
||||
if ((enc = drmModeGetEncoder(fd, dev->enc_id)) == NULL)
|
||||
fatal("drmModeGetEncoder() faild");
|
||||
if (enc->crtc_id) {
|
||||
dev->crtc_id = enc->crtc_id;
|
||||
if (enc->possible_clones == 2) {
|
||||
dev->crtc_id = res->crtcs[1];
|
||||
} else {
|
||||
dev->crtc_id = res->crtcs[0];
|
||||
}
|
||||
@@ -425,6 +425,16 @@ static void drm_destroy(int fd, struct drm_dev_t *dev_head)
|
||||
drmClose(fd);
|
||||
LOG(STF_LEVEL_TRACE, "Exit\n");
|
||||
}
|
||||
static struct drm_dev_t *drm_find_connector(DRMParam_t *param, drm_dev_t *dev)
|
||||
{
|
||||
drm_dev_t *tmp_dev = NULL;
|
||||
|
||||
for (tmp_dev = dev; tmp_dev != NULL; tmp_dev = dev->next) {
|
||||
if (param->connector_id == tmp_dev->conn_id && param->connector_id != 0)
|
||||
return tmp_dev;
|
||||
}
|
||||
return dev;
|
||||
}
|
||||
|
||||
void stf_drm_open(DRMParam_t *param, char *device_name, int iomthd)
|
||||
{
|
||||
@@ -458,6 +468,7 @@ void stf_drm_init(DRMParam_t *param, uint32_t width, uint32_t height,
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
dev_head = drm_find_connector(param, dev_head);
|
||||
dev_head->drm_format = v4l2fmt_to_drmfmt(v4l2_fmt);
|
||||
|
||||
if (IO_METHOD_MMAP == iomthd) {
|
||||
|
||||
@@ -37,6 +37,7 @@ typedef struct drm_dev_t {
|
||||
typedef struct DRMParam_t {
|
||||
drm_dev_t* dev_head;
|
||||
int fd;
|
||||
int connector_id;
|
||||
} DRMParam_t;
|
||||
|
||||
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
#define STFBC_DEVICE_NAME "/dev/stfbcdev"
|
||||
#define DRM_DEVICE_NAME "/dev/dri/card0"
|
||||
#define V4L2_DFT_DEVICE_NAME "/dev/video0"
|
||||
#define INNO_HDMI_CONNECTOR_ID 116
|
||||
#define MIPI_RGB_CONNECTOR_ID 118
|
||||
|
||||
typedef struct enum_value_t {
|
||||
int value;
|
||||
@@ -93,6 +95,7 @@ static void alloc_default_config(ConfigParam_t **pp_data)
|
||||
cfg_param->fb_param.bpp = 16;
|
||||
cfg_param->fb_param.screen_size = cfg_param->fb_param.width *
|
||||
cfg_param->fb_param.height * cfg_param->fb_param.bpp / 8;
|
||||
cfg_param->drm_param.connector_id = 0;
|
||||
|
||||
*pp_data = cfg_param;
|
||||
}
|
||||
@@ -735,6 +738,9 @@ static void usage(FILE* fp, int argc, char** argv)
|
||||
"-D | --down Set v4l2 image crop y height\n"
|
||||
"-I | --interval Set frame interval (fps) (-1 to skip)\n"
|
||||
"-c | --continuous Do continous capture, stop with SIGINT.\n"
|
||||
"-C | --connector Display Connector.\n"
|
||||
" 0: INNO HDMI\n"
|
||||
" 1: MIPI/RGB HDMI\n"
|
||||
"-v | --version Print version\n"
|
||||
"-f | --format image format, default 5\n"
|
||||
" 0: V4L2_PIX_FMT_RGB565\n"
|
||||
@@ -767,7 +773,7 @@ static void usage(FILE* fp, int argc, char** argv)
|
||||
argv[0]);
|
||||
}
|
||||
|
||||
static const char short_options [] = "d:ho:q:m:W:H:I:vcf:t:X:Y:R:D:l:s";
|
||||
static const char short_options [] = "d:ho:q:m:W:H:I:vcf:t:X:Y:R:D:l:C:s";
|
||||
|
||||
static const struct option long_options [] = {
|
||||
{ "device", required_argument, NULL, 'd' },
|
||||
@@ -787,6 +793,7 @@ static const struct option long_options [] = {
|
||||
{ "format", required_argument, NULL, 'f' },
|
||||
{ "distype", required_argument, NULL, 't' },
|
||||
{ "loadfw", required_argument, NULL, 'l' },
|
||||
{ "connector", required_argument, NULL, 'C' },
|
||||
{ "g_imagesize",no_argument, NULL, 's' },
|
||||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
@@ -945,6 +952,15 @@ void parse_options(int argc, char **argv, ConfigParam_t *cfg_param)
|
||||
sensor_image_size_info(&(cfg_param->v4l2_param));
|
||||
exit(EXIT_SUCCESS);
|
||||
break;
|
||||
|
||||
case 'C':
|
||||
value = atoi(optarg);
|
||||
if (value == 0)
|
||||
cfg_param->drm_param.connector_id = INNO_HDMI_CONNECTOR_ID;
|
||||
else
|
||||
cfg_param->drm_param.connector_id = MIPI_RGB_CONNECTOR_ID;
|
||||
break;
|
||||
|
||||
default:
|
||||
usage(stderr, argc, argv);
|
||||
exit(EXIT_FAILURE);
|
||||
|
||||
Reference in New Issue
Block a user