1a4f0e38eSShuah Khan // SPDX-License-Identifier: GPL-2.0
2a4f0e38eSShuah Khan
3b96da0fcSShuah Khan /*
4b96da0fcSShuah Khan * media_device_open.c - Media Controller Device Open Test
5b96da0fcSShuah Khan *
6b96da0fcSShuah Khan * Copyright (c) 2016 Shuah Khan <shuahkh@osg.samsung.com>
7b96da0fcSShuah Khan * Copyright (c) 2016 Samsung Electronics Co., Ltd.
8b96da0fcSShuah Khan *
9b96da0fcSShuah Khan */
10b96da0fcSShuah Khan
11b96da0fcSShuah Khan /*
12b96da0fcSShuah Khan * This file adds a test for Media Controller API.
13b96da0fcSShuah Khan * This test should be run as root and should not be
14b96da0fcSShuah Khan * included in the Kselftest run. This test should be
15b96da0fcSShuah Khan * run when hardware and driver that makes use Media
16b96da0fcSShuah Khan * Controller API are present in the system.
17b96da0fcSShuah Khan *
18b96da0fcSShuah Khan * This test opens user specified Media Device and calls
19b96da0fcSShuah Khan * MEDIA_IOC_DEVICE_INFO ioctl, closes the file, and exits.
20b96da0fcSShuah Khan *
21b96da0fcSShuah Khan * Usage:
22b96da0fcSShuah Khan * sudo ./media_device_open -d /dev/mediaX
23b96da0fcSShuah Khan *
24b96da0fcSShuah Khan * Run this test is a loop and run bind/unbind on the driver.
25b96da0fcSShuah Khan */
26b96da0fcSShuah Khan
27b96da0fcSShuah Khan #include <stdio.h>
28b96da0fcSShuah Khan #include <unistd.h>
29b96da0fcSShuah Khan #include <stdlib.h>
30b96da0fcSShuah Khan #include <errno.h>
31b96da0fcSShuah Khan #include <string.h>
32b96da0fcSShuah Khan #include <fcntl.h>
33b96da0fcSShuah Khan #include <sys/ioctl.h>
34b96da0fcSShuah Khan #include <sys/stat.h>
35b96da0fcSShuah Khan #include <linux/media.h>
36b96da0fcSShuah Khan
37*11381286SShuah Khan (Samsung OSG) #include "../kselftest.h"
38*11381286SShuah Khan (Samsung OSG)
main(int argc,char ** argv)39b96da0fcSShuah Khan int main(int argc, char **argv)
40b96da0fcSShuah Khan {
41b96da0fcSShuah Khan int opt;
42b96da0fcSShuah Khan char media_device[256];
43b96da0fcSShuah Khan int count = 0;
44b96da0fcSShuah Khan struct media_device_info mdi;
45b96da0fcSShuah Khan int ret;
46b96da0fcSShuah Khan int fd;
47b96da0fcSShuah Khan
48b96da0fcSShuah Khan if (argc < 2) {
49b96da0fcSShuah Khan printf("Usage: %s [-d </dev/mediaX>]\n", argv[0]);
50b96da0fcSShuah Khan exit(-1);
51b96da0fcSShuah Khan }
52b96da0fcSShuah Khan
53b96da0fcSShuah Khan /* Process arguments */
54b96da0fcSShuah Khan while ((opt = getopt(argc, argv, "d:")) != -1) {
55b96da0fcSShuah Khan switch (opt) {
56b96da0fcSShuah Khan case 'd':
57b96da0fcSShuah Khan strncpy(media_device, optarg, sizeof(media_device) - 1);
58b96da0fcSShuah Khan media_device[sizeof(media_device)-1] = '\0';
59b96da0fcSShuah Khan break;
60b96da0fcSShuah Khan default:
61b96da0fcSShuah Khan printf("Usage: %s [-d </dev/mediaX>]\n", argv[0]);
62b96da0fcSShuah Khan exit(-1);
63b96da0fcSShuah Khan }
64b96da0fcSShuah Khan }
65b96da0fcSShuah Khan
66*11381286SShuah Khan (Samsung OSG) if (getuid() != 0)
67*11381286SShuah Khan (Samsung OSG) ksft_exit_skip("Please run the test as root - Exiting.\n");
68b96da0fcSShuah Khan
69b96da0fcSShuah Khan /* Open Media device and keep it open */
70b96da0fcSShuah Khan fd = open(media_device, O_RDWR);
71b96da0fcSShuah Khan if (fd == -1) {
72b96da0fcSShuah Khan printf("Media Device open errno %s\n", strerror(errno));
73b96da0fcSShuah Khan exit(-1);
74b96da0fcSShuah Khan }
75b96da0fcSShuah Khan
76b96da0fcSShuah Khan ret = ioctl(fd, MEDIA_IOC_DEVICE_INFO, &mdi);
77b96da0fcSShuah Khan if (ret < 0)
78b96da0fcSShuah Khan printf("Media Device Info errno %s\n", strerror(errno));
79b96da0fcSShuah Khan else
80b96da0fcSShuah Khan printf("Media device model %s driver %s\n",
81b96da0fcSShuah Khan mdi.model, mdi.driver);
82b96da0fcSShuah Khan }
83