2 * output.c - Display Output Switch driver
4 * Copyright (C) 2006 Luming Yu <luming.yu@intel.com>
6 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or (at
11 * your option) any later version.
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
18 * You should have received a copy of the GNU General Public License along
19 * with this program; if not, write to the Free Software Foundation, Inc.,
20 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
22 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24 #include <linux/module.h>
25 #include <linux/video_output.h>
26 #include <linux/err.h>
27 #include <linux/ctype.h>
30 MODULE_DESCRIPTION("Display Output Switcher Lowlevel Control Abstraction");
31 MODULE_LICENSE("GPL");
32 MODULE_AUTHOR("Luming Yu <luming.yu@intel.com>");
34 static ssize_t
video_output_show_state(struct device
*dev
,
35 struct device_attribute
*attr
, char *buf
)
38 struct output_device
*od
= to_output_device(dev
);
40 ret_size
= sprintf(buf
,"%.8x\n",od
->props
->get_status(od
));
44 static ssize_t
video_output_store_state(struct device
*dev
,
45 struct device_attribute
*attr
,
46 const char *buf
,size_t count
)
49 struct output_device
*od
= to_output_device(dev
);
50 int request_state
= simple_strtoul(buf
,&endp
,0);
51 size_t size
= endp
- buf
;
53 if (*endp
&& isspace(*endp
))
59 od
->request_state
= request_state
;
60 od
->props
->set_state(od
);
65 static void video_output_release(struct device
*dev
)
67 struct output_device
*od
= to_output_device(dev
);
71 static struct device_attribute video_output_attributes
[] = {
72 __ATTR(state
, 0644, video_output_show_state
, video_output_store_state
),
77 static struct class video_output_class
= {
78 .name
= "video_output",
79 .dev_release
= video_output_release
,
80 .dev_attrs
= video_output_attributes
,
83 struct output_device
*video_output_register(const char *name
,
86 struct output_properties
*op
)
88 struct output_device
*new_dev
;
91 new_dev
= kzalloc(sizeof(struct output_device
),GFP_KERNEL
);
97 new_dev
->dev
.class = &video_output_class
;
98 new_dev
->dev
.parent
= dev
;
99 dev_set_name(&new_dev
->dev
, name
);
100 dev_set_drvdata(&new_dev
->dev
, devdata
);
101 ret_code
= device_register(&new_dev
->dev
);
109 return ERR_PTR(ret_code
);
111 EXPORT_SYMBOL(video_output_register
);
113 void video_output_unregister(struct output_device
*dev
)
117 device_unregister(&dev
->dev
);
119 EXPORT_SYMBOL(video_output_unregister
);
121 static void __exit
video_output_class_exit(void)
123 class_unregister(&video_output_class
);
126 static int __init
video_output_class_init(void)
128 return class_register(&video_output_class
);
131 postcore_initcall(video_output_class_init
);
132 module_exit(video_output_class_exit
);