1 --- kernel-power-2.6.28/drivers/media/radio/radio-si4713.c 2012-02-17 20:44:03.508286080 +0100
2 +++ kernel-power-2.6.28/drivers/media/radio/radio-si4713.c 2012-02-17 20:45:13.976284020 +0100
4 static int radio_nr = -1; /* radio device minor (-1 ==> auto assign) */
6 /* properties lock for write operations */
7 -static int config_locked;
8 +static int config_locked = 1;
10 -/* saved power levels */
11 -static unsigned int max_pl;
12 -static unsigned int min_pl;
14 -/* structure for pid registration */
17 - struct list_head plist;
20 -#define APP_MAX_NUM 2
22 -static int pid_count;
23 -static LIST_HEAD(pid_list_head);
24 -static struct si4713_device *si4713_dev;
25 +/* module param for initial power level */
26 +static int init_power_level = 120;
30 @@ -193,17 +180,7 @@ static ssize_t si4713_lock_write(struct
39 - sscanf(buf, "%d", &l);
45 + return sscanf(buf, "%d", &config_locked);
48 static ssize_t si4713_lock_read(struct device *dev,
49 @@ -219,7 +196,7 @@ static DEVICE_ATTR(lock, S_IRUGO | S_IWU
51 * Power level property
53 -/* power_level (rw) 88 - 115 or 0 */
54 +/* power_level (rw) 88 - 120 or 0 */
55 static ssize_t si4713_power_level_write(struct device *dev,
56 struct device_attribute *attr,
58 @@ -230,7 +207,7 @@ static ssize_t si4713_power_level_write(
67 @@ -420,109 +397,13 @@ static irqreturn_t si4713_handler(int ir
71 -static int register_pid(pid_t pid)
73 - struct pid_list *pitem;
75 - list_for_each_entry(pitem, &pid_list_head, plist) {
76 - if (pitem->pid == pid)
80 - pitem = kmalloc(sizeof(struct pid_list), GFP_KERNEL);
87 - list_add(&(pitem->plist), &pid_list_head);
93 -static int unregister_pid(pid_t pid)
95 - struct pid_list *pitem, *n;
97 - list_for_each_entry_safe(pitem, n, &pid_list_head, plist) {
98 - if (pitem->pid == pid) {
99 - list_del(&(pitem->plist));
110 static int si4713_priv_ioctl(struct inode *inode, struct file *file,
111 unsigned int cmd, unsigned long arg)
116 if (cmd != LOCK_LOW_POWER && cmd != RELEASE_LOW_POWER)
117 return video_ioctl2(inode, file, cmd, arg);
119 - pl = si4713_get_power_level(si4713_dev);
126 - if (copy_from_user(&pow, (void __user *)arg, sizeof(pow))) {
131 - if (cmd == LOCK_LOW_POWER) {
133 - if (pid_count == APP_MAX_NUM) {
138 - if (pid_count == 0) {
143 - /* Set max possible power level */
149 - rval = register_pid(current->pid);
154 - /* Lower min power level if asked */
160 - } else { /* RELEASE_LOW_POWER */
161 - rval = unregister_pid(current->pid);
166 - if (pid_count == 0) {
171 - rval = si4713_set_power_level(si4713_dev, pow);
179 @@ -906,8 +787,11 @@ static int si4713_i2c_driver_probe(struc
183 - /* save to global pointer for it to be accesible from ioctl() call */
185 + rval = si4713_set_power_level(sdev, init_power_level);
187 + dev_dbg(&client->dev, "Failed to set initial power level.\n");
193 @@ -1013,6 +897,12 @@ module_param(radio_nr, int, 0);
194 MODULE_PARM_DESC(radio_nr,
195 "Minor number for radio device (-1 ==> auto assign)");
197 +module_param(init_power_level, int, 120);
198 +MODULE_PARM_DESC(init_power_level, "Initial value of power level (default 120)");
200 +module_param(config_locked, int, 1);
201 +MODULE_PARM_DESC(config_locked, "Lock power level configuration on init (default 1 - locked)");
203 MODULE_LICENSE("GPL");
204 MODULE_AUTHOR(DRIVER_AUTHOR);
205 MODULE_DESCRIPTION(DRIVER_DESC);