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 */
|
/* FIXME: use default encoder/crtc pair */
|
||||||
if ((enc = drmModeGetEncoder(fd, dev->enc_id)) == NULL)
|
if ((enc = drmModeGetEncoder(fd, dev->enc_id)) == NULL)
|
||||||
fatal("drmModeGetEncoder() faild");
|
fatal("drmModeGetEncoder() faild");
|
||||||
if (enc->crtc_id) {
|
if (enc->possible_clones == 2) {
|
||||||
dev->crtc_id = enc->crtc_id;
|
dev->crtc_id = res->crtcs[1];
|
||||||
} else {
|
} else {
|
||||||
dev->crtc_id = res->crtcs[0];
|
dev->crtc_id = res->crtcs[0];
|
||||||
}
|
}
|
||||||
@@ -425,6 +425,16 @@ static void drm_destroy(int fd, struct drm_dev_t *dev_head)
|
|||||||
drmClose(fd);
|
drmClose(fd);
|
||||||
LOG(STF_LEVEL_TRACE, "Exit\n");
|
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)
|
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);
|
exit (EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dev_head = drm_find_connector(param, dev_head);
|
||||||
dev_head->drm_format = v4l2fmt_to_drmfmt(v4l2_fmt);
|
dev_head->drm_format = v4l2fmt_to_drmfmt(v4l2_fmt);
|
||||||
|
|
||||||
if (IO_METHOD_MMAP == iomthd) {
|
if (IO_METHOD_MMAP == iomthd) {
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ typedef struct drm_dev_t {
|
|||||||
typedef struct DRMParam_t {
|
typedef struct DRMParam_t {
|
||||||
drm_dev_t* dev_head;
|
drm_dev_t* dev_head;
|
||||||
int fd;
|
int fd;
|
||||||
|
int connector_id;
|
||||||
} DRMParam_t;
|
} DRMParam_t;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,8 @@
|
|||||||
#define STFBC_DEVICE_NAME "/dev/stfbcdev"
|
#define STFBC_DEVICE_NAME "/dev/stfbcdev"
|
||||||
#define DRM_DEVICE_NAME "/dev/dri/card0"
|
#define DRM_DEVICE_NAME "/dev/dri/card0"
|
||||||
#define V4L2_DFT_DEVICE_NAME "/dev/video0"
|
#define V4L2_DFT_DEVICE_NAME "/dev/video0"
|
||||||
|
#define INNO_HDMI_CONNECTOR_ID 116
|
||||||
|
#define MIPI_RGB_CONNECTOR_ID 118
|
||||||
|
|
||||||
typedef struct enum_value_t {
|
typedef struct enum_value_t {
|
||||||
int value;
|
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.bpp = 16;
|
||||||
cfg_param->fb_param.screen_size = cfg_param->fb_param.width *
|
cfg_param->fb_param.screen_size = cfg_param->fb_param.width *
|
||||||
cfg_param->fb_param.height * cfg_param->fb_param.bpp / 8;
|
cfg_param->fb_param.height * cfg_param->fb_param.bpp / 8;
|
||||||
|
cfg_param->drm_param.connector_id = 0;
|
||||||
|
|
||||||
*pp_data = cfg_param;
|
*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"
|
"-D | --down Set v4l2 image crop y height\n"
|
||||||
"-I | --interval Set frame interval (fps) (-1 to skip)\n"
|
"-I | --interval Set frame interval (fps) (-1 to skip)\n"
|
||||||
"-c | --continuous Do continous capture, stop with SIGINT.\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"
|
"-v | --version Print version\n"
|
||||||
"-f | --format image format, default 5\n"
|
"-f | --format image format, default 5\n"
|
||||||
" 0: V4L2_PIX_FMT_RGB565\n"
|
" 0: V4L2_PIX_FMT_RGB565\n"
|
||||||
@@ -767,7 +773,7 @@ static void usage(FILE* fp, int argc, char** argv)
|
|||||||
argv[0]);
|
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 [] = {
|
static const struct option long_options [] = {
|
||||||
{ "device", required_argument, NULL, 'd' },
|
{ "device", required_argument, NULL, 'd' },
|
||||||
@@ -787,6 +793,7 @@ static const struct option long_options [] = {
|
|||||||
{ "format", required_argument, NULL, 'f' },
|
{ "format", required_argument, NULL, 'f' },
|
||||||
{ "distype", required_argument, NULL, 't' },
|
{ "distype", required_argument, NULL, 't' },
|
||||||
{ "loadfw", required_argument, NULL, 'l' },
|
{ "loadfw", required_argument, NULL, 'l' },
|
||||||
|
{ "connector", required_argument, NULL, 'C' },
|
||||||
{ "g_imagesize",no_argument, NULL, 's' },
|
{ "g_imagesize",no_argument, NULL, 's' },
|
||||||
{ 0, 0, 0, 0 }
|
{ 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));
|
sensor_image_size_info(&(cfg_param->v4l2_param));
|
||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
break;
|
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:
|
default:
|
||||||
usage(stderr, argc, argv);
|
usage(stderr, argc, argv);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
|
|||||||
Reference in New Issue
Block a user