diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-04-27 17:25:30 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-04-27 17:25:30 -0400 |
commit | 2cb14596a03036bb8b9d3c60f9c4dbdf3a745c76 (patch) | |
tree | 9bb4fbc01ff4506b4ae85d25d37536f49354597a | |
parent | a9aa0e24f7ed5acf2e0e1799fb28daf928293ba1 (diff) | |
parent | 5bd982ed0f5ae73bfd9ff452b460a3b08108bfee (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6:
[PATCH] Added URI of "linux kernel development process"
[PATCH] Kobject: possible cleanups
[PATCH] Fix OCFS2 warning when DEBUG_FS is not enabled
[PATCH] Kobject: fix build error
[PATCH] Frame buffer: remove cmap sysfs interface
-rw-r--r-- | Documentation/HOWTO | 3 | ||||
-rw-r--r-- | drivers/video/fbsysfs.c | 92 | ||||
-rw-r--r-- | include/linux/debugfs.h | 5 | ||||
-rw-r--r-- | include/linux/kobject.h | 3 | ||||
-rw-r--r-- | lib/kobject.c | 7 | ||||
-rw-r--r-- | lib/kobject_uevent.c | 8 |
6 files changed, 17 insertions, 101 deletions
diff --git a/Documentation/HOWTO b/Documentation/HOWTO index 6c9e746267da..915ae8c986c6 100644 --- a/Documentation/HOWTO +++ b/Documentation/HOWTO | |||
@@ -603,7 +603,8 @@ start exactly where you are now. | |||
603 | 603 | ||
604 | 604 | ||
605 | ---------- | 605 | ---------- |
606 | Thanks to Paolo Ciarrocchi who allowed the "Development Process" section | 606 | Thanks to Paolo Ciarrocchi who allowed the "Development Process" |
607 | (http://linux.tar.bz/articles/2.6-development_process) section | ||
607 | to be based on text he had written, and to Randy Dunlap and Gerrit | 608 | to be based on text he had written, and to Randy Dunlap and Gerrit |
608 | Huizenga for some of the list of things you should and should not say. | 609 | Huizenga for some of the list of things you should and should not say. |
609 | Also thanks to Pat Mochel, Hanna Linder, Randy Dunlap, Kay Sievers, | 610 | Also thanks to Pat Mochel, Hanna Linder, Randy Dunlap, Kay Sievers, |
diff --git a/drivers/video/fbsysfs.c b/drivers/video/fbsysfs.c index b72b05250a9d..34e07399756b 100644 --- a/drivers/video/fbsysfs.c +++ b/drivers/video/fbsysfs.c | |||
@@ -305,94 +305,6 @@ static ssize_t show_stride(struct class_device *class_device, char *buf) | |||
305 | return snprintf(buf, PAGE_SIZE, "%d\n", fb_info->fix.line_length); | 305 | return snprintf(buf, PAGE_SIZE, "%d\n", fb_info->fix.line_length); |
306 | } | 306 | } |
307 | 307 | ||
308 | /* Format for cmap is "%02x%c%4x%4x%4x\n" */ | ||
309 | /* %02x entry %c transp %4x red %4x blue %4x green \n */ | ||
310 | /* 256 rows at 16 chars equals 4096, the normal page size */ | ||
311 | /* the code will automatically adjust for different page sizes */ | ||
312 | static ssize_t store_cmap(struct class_device *class_device, const char *buf, | ||
313 | size_t count) | ||
314 | { | ||
315 | struct fb_info *fb_info = class_get_devdata(class_device); | ||
316 | int rc, i, start, length, transp = 0; | ||
317 | |||
318 | if ((count > PAGE_SIZE) || ((count % 16) != 0)) | ||
319 | return -EINVAL; | ||
320 | |||
321 | if (!fb_info->fbops->fb_setcolreg && !fb_info->fbops->fb_setcmap) | ||
322 | return -EINVAL; | ||
323 | |||
324 | sscanf(buf, "%02x", &start); | ||
325 | length = count / 16; | ||
326 | |||
327 | for (i = 0; i < length; i++) | ||
328 | if (buf[i * 16 + 2] != ' ') | ||
329 | transp = 1; | ||
330 | |||
331 | /* If we can batch, do it */ | ||
332 | if (fb_info->fbops->fb_setcmap && length > 1) { | ||
333 | struct fb_cmap umap; | ||
334 | |||
335 | memset(&umap, 0, sizeof(umap)); | ||
336 | if ((rc = fb_alloc_cmap(&umap, length, transp))) | ||
337 | return rc; | ||
338 | |||
339 | umap.start = start; | ||
340 | for (i = 0; i < length; i++) { | ||
341 | sscanf(&buf[i * 16 + 3], "%4hx", &umap.red[i]); | ||
342 | sscanf(&buf[i * 16 + 7], "%4hx", &umap.blue[i]); | ||
343 | sscanf(&buf[i * 16 + 11], "%4hx", &umap.green[i]); | ||
344 | if (transp) | ||
345 | umap.transp[i] = (buf[i * 16 + 2] != ' '); | ||
346 | } | ||
347 | rc = fb_info->fbops->fb_setcmap(&umap, fb_info); | ||
348 | fb_copy_cmap(&umap, &fb_info->cmap); | ||
349 | fb_dealloc_cmap(&umap); | ||
350 | |||
351 | return rc ?: count; | ||
352 | } | ||
353 | for (i = 0; i < length; i++) { | ||
354 | u16 red, blue, green, tsp; | ||
355 | |||
356 | sscanf(&buf[i * 16 + 3], "%4hx", &red); | ||
357 | sscanf(&buf[i * 16 + 7], "%4hx", &blue); | ||
358 | sscanf(&buf[i * 16 + 11], "%4hx", &green); | ||
359 | tsp = (buf[i * 16 + 2] != ' '); | ||
360 | if ((rc = fb_info->fbops->fb_setcolreg(start++, | ||
361 | red, green, blue, tsp, fb_info))) | ||
362 | return rc; | ||
363 | |||
364 | fb_info->cmap.red[i] = red; | ||
365 | fb_info->cmap.blue[i] = blue; | ||
366 | fb_info->cmap.green[i] = green; | ||
367 | if (transp) | ||
368 | fb_info->cmap.transp[i] = tsp; | ||
369 | } | ||
370 | return count; | ||
371 | } | ||
372 | |||
373 | static ssize_t show_cmap(struct class_device *class_device, char *buf) | ||
374 | { | ||
375 | struct fb_info *fb_info = class_get_devdata(class_device); | ||
376 | unsigned int i; | ||
377 | |||
378 | if (!fb_info->cmap.red || !fb_info->cmap.blue || | ||
379 | !fb_info->cmap.green) | ||
380 | return -EINVAL; | ||
381 | |||
382 | if (fb_info->cmap.len > PAGE_SIZE / 16) | ||
383 | return -EINVAL; | ||
384 | |||
385 | /* don't mess with the format, the buffer is PAGE_SIZE */ | ||
386 | /* 256 entries at 16 chars per line equals 4096 = PAGE_SIZE */ | ||
387 | for (i = 0; i < fb_info->cmap.len; i++) { | ||
388 | snprintf(&buf[ i * 16], PAGE_SIZE - i * 16, "%02x%c%4x%4x%4x\n", i + fb_info->cmap.start, | ||
389 | ((fb_info->cmap.transp && fb_info->cmap.transp[i]) ? '*' : ' '), | ||
390 | fb_info->cmap.red[i], fb_info->cmap.blue[i], | ||
391 | fb_info->cmap.green[i]); | ||
392 | } | ||
393 | return 16 * fb_info->cmap.len; | ||
394 | } | ||
395 | |||
396 | static ssize_t store_blank(struct class_device *class_device, const char * buf, | 308 | static ssize_t store_blank(struct class_device *class_device, const char * buf, |
397 | size_t count) | 309 | size_t count) |
398 | { | 310 | { |
@@ -502,10 +414,12 @@ static ssize_t show_fbstate(struct class_device *class_device, char *buf) | |||
502 | return snprintf(buf, PAGE_SIZE, "%d\n", fb_info->state); | 414 | return snprintf(buf, PAGE_SIZE, "%d\n", fb_info->state); |
503 | } | 415 | } |
504 | 416 | ||
417 | /* When cmap is added back in it should be a binary attribute | ||
418 | * not a text one. Consideration should also be given to converting | ||
419 | * fbdev to use configfs instead of sysfs */ | ||
505 | static struct class_device_attribute class_device_attrs[] = { | 420 | static struct class_device_attribute class_device_attrs[] = { |
506 | __ATTR(bits_per_pixel, S_IRUGO|S_IWUSR, show_bpp, store_bpp), | 421 | __ATTR(bits_per_pixel, S_IRUGO|S_IWUSR, show_bpp, store_bpp), |
507 | __ATTR(blank, S_IRUGO|S_IWUSR, show_blank, store_blank), | 422 | __ATTR(blank, S_IRUGO|S_IWUSR, show_blank, store_blank), |
508 | __ATTR(color_map, S_IRUGO|S_IWUSR, show_cmap, store_cmap), | ||
509 | __ATTR(console, S_IRUGO|S_IWUSR, show_console, store_console), | 423 | __ATTR(console, S_IRUGO|S_IWUSR, show_console, store_console), |
510 | __ATTR(cursor, S_IRUGO|S_IWUSR, show_cursor, store_cursor), | 424 | __ATTR(cursor, S_IRUGO|S_IWUSR, show_cursor, store_cursor), |
511 | __ATTR(mode, S_IRUGO|S_IWUSR, show_mode, store_mode), | 425 | __ATTR(mode, S_IRUGO|S_IWUSR, show_mode, store_mode), |
diff --git a/include/linux/debugfs.h b/include/linux/debugfs.h index 176e2d371577..047567d34ca7 100644 --- a/include/linux/debugfs.h +++ b/include/linux/debugfs.h | |||
@@ -58,9 +58,8 @@ struct dentry *debugfs_create_blob(const char *name, mode_t mode, | |||
58 | */ | 58 | */ |
59 | 59 | ||
60 | static inline struct dentry *debugfs_create_file(const char *name, mode_t mode, | 60 | static inline struct dentry *debugfs_create_file(const char *name, mode_t mode, |
61 | struct dentry *parent, | 61 | struct dentry *parent, void *data, |
62 | void *data, | 62 | const struct file_operations *fops) |
63 | struct file_operations *fops) | ||
64 | { | 63 | { |
65 | return ERR_PTR(-ENODEV); | 64 | return ERR_PTR(-ENODEV); |
66 | } | 65 | } |
diff --git a/include/linux/kobject.h b/include/linux/kobject.h index dcd0623be892..c187c53cecd0 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h | |||
@@ -257,9 +257,8 @@ struct subsys_attribute { | |||
257 | }; | 257 | }; |
258 | 258 | ||
259 | extern int subsys_create_file(struct subsystem * , struct subsys_attribute *); | 259 | extern int subsys_create_file(struct subsystem * , struct subsys_attribute *); |
260 | extern void subsys_remove_file(struct subsystem * , struct subsys_attribute *); | ||
261 | 260 | ||
262 | #if defined(CONFIG_HOTPLUG) && defined(CONFIG_NET) | 261 | #if defined(CONFIG_HOTPLUG) |
263 | void kobject_uevent(struct kobject *kobj, enum kobject_action action); | 262 | void kobject_uevent(struct kobject *kobj, enum kobject_action action); |
264 | 263 | ||
265 | int add_uevent_var(char **envp, int num_envp, int *cur_index, | 264 | int add_uevent_var(char **envp, int num_envp, int *cur_index, |
diff --git a/lib/kobject.c b/lib/kobject.c index 01d957513940..b46350c27837 100644 --- a/lib/kobject.c +++ b/lib/kobject.c | |||
@@ -422,7 +422,6 @@ struct kobject *kobject_add_dir(struct kobject *parent, const char *name) | |||
422 | 422 | ||
423 | return k; | 423 | return k; |
424 | } | 424 | } |
425 | EXPORT_SYMBOL_GPL(kobject_add_dir); | ||
426 | 425 | ||
427 | /** | 426 | /** |
428 | * kset_init - initialize a kset for use | 427 | * kset_init - initialize a kset for use |
@@ -569,7 +568,7 @@ int subsys_create_file(struct subsystem * s, struct subsys_attribute * a) | |||
569 | * @s: subsystem. | 568 | * @s: subsystem. |
570 | * @a: attribute desciptor. | 569 | * @a: attribute desciptor. |
571 | */ | 570 | */ |
572 | 571 | #if 0 | |
573 | void subsys_remove_file(struct subsystem * s, struct subsys_attribute * a) | 572 | void subsys_remove_file(struct subsystem * s, struct subsys_attribute * a) |
574 | { | 573 | { |
575 | if (subsys_get(s)) { | 574 | if (subsys_get(s)) { |
@@ -577,6 +576,7 @@ void subsys_remove_file(struct subsystem * s, struct subsys_attribute * a) | |||
577 | subsys_put(s); | 576 | subsys_put(s); |
578 | } | 577 | } |
579 | } | 578 | } |
579 | #endif /* 0 */ | ||
580 | 580 | ||
581 | EXPORT_SYMBOL(kobject_init); | 581 | EXPORT_SYMBOL(kobject_init); |
582 | EXPORT_SYMBOL(kobject_register); | 582 | EXPORT_SYMBOL(kobject_register); |
@@ -588,10 +588,7 @@ EXPORT_SYMBOL(kobject_del); | |||
588 | 588 | ||
589 | EXPORT_SYMBOL(kset_register); | 589 | EXPORT_SYMBOL(kset_register); |
590 | EXPORT_SYMBOL(kset_unregister); | 590 | EXPORT_SYMBOL(kset_unregister); |
591 | EXPORT_SYMBOL(kset_find_obj); | ||
592 | 591 | ||
593 | EXPORT_SYMBOL(subsystem_init); | ||
594 | EXPORT_SYMBOL(subsystem_register); | 592 | EXPORT_SYMBOL(subsystem_register); |
595 | EXPORT_SYMBOL(subsystem_unregister); | 593 | EXPORT_SYMBOL(subsystem_unregister); |
596 | EXPORT_SYMBOL(subsys_create_file); | 594 | EXPORT_SYMBOL(subsys_create_file); |
597 | EXPORT_SYMBOL(subsys_remove_file); | ||
diff --git a/lib/kobject_uevent.c b/lib/kobject_uevent.c index 982226daf939..7f20e7b857cb 100644 --- a/lib/kobject_uevent.c +++ b/lib/kobject_uevent.c | |||
@@ -25,11 +25,13 @@ | |||
25 | #define BUFFER_SIZE 2048 /* buffer for the variables */ | 25 | #define BUFFER_SIZE 2048 /* buffer for the variables */ |
26 | #define NUM_ENVP 32 /* number of env pointers */ | 26 | #define NUM_ENVP 32 /* number of env pointers */ |
27 | 27 | ||
28 | #if defined(CONFIG_HOTPLUG) && defined(CONFIG_NET) | 28 | #if defined(CONFIG_HOTPLUG) |
29 | u64 uevent_seqnum; | 29 | u64 uevent_seqnum; |
30 | char uevent_helper[UEVENT_HELPER_PATH_LEN] = "/sbin/hotplug"; | 30 | char uevent_helper[UEVENT_HELPER_PATH_LEN] = "/sbin/hotplug"; |
31 | static DEFINE_SPINLOCK(sequence_lock); | 31 | static DEFINE_SPINLOCK(sequence_lock); |
32 | #if defined(CONFIG_NET) | ||
32 | static struct sock *uevent_sock; | 33 | static struct sock *uevent_sock; |
34 | #endif | ||
33 | 35 | ||
34 | static char *action_to_string(enum kobject_action action) | 36 | static char *action_to_string(enum kobject_action action) |
35 | { | 37 | { |
@@ -155,6 +157,7 @@ void kobject_uevent(struct kobject *kobj, enum kobject_action action) | |||
155 | spin_unlock(&sequence_lock); | 157 | spin_unlock(&sequence_lock); |
156 | sprintf(seq_buff, "SEQNUM=%llu", (unsigned long long)seq); | 158 | sprintf(seq_buff, "SEQNUM=%llu", (unsigned long long)seq); |
157 | 159 | ||
160 | #if defined(CONFIG_NET) | ||
158 | /* send netlink message */ | 161 | /* send netlink message */ |
159 | if (uevent_sock) { | 162 | if (uevent_sock) { |
160 | struct sk_buff *skb; | 163 | struct sk_buff *skb; |
@@ -179,6 +182,7 @@ void kobject_uevent(struct kobject *kobj, enum kobject_action action) | |||
179 | netlink_broadcast(uevent_sock, skb, 0, 1, GFP_KERNEL); | 182 | netlink_broadcast(uevent_sock, skb, 0, 1, GFP_KERNEL); |
180 | } | 183 | } |
181 | } | 184 | } |
185 | #endif | ||
182 | 186 | ||
183 | /* call uevent_helper, usually only enabled during early boot */ | 187 | /* call uevent_helper, usually only enabled during early boot */ |
184 | if (uevent_helper[0]) { | 188 | if (uevent_helper[0]) { |
@@ -249,6 +253,7 @@ int add_uevent_var(char **envp, int num_envp, int *cur_index, | |||
249 | } | 253 | } |
250 | EXPORT_SYMBOL_GPL(add_uevent_var); | 254 | EXPORT_SYMBOL_GPL(add_uevent_var); |
251 | 255 | ||
256 | #if defined(CONFIG_NET) | ||
252 | static int __init kobject_uevent_init(void) | 257 | static int __init kobject_uevent_init(void) |
253 | { | 258 | { |
254 | uevent_sock = netlink_kernel_create(NETLINK_KOBJECT_UEVENT, 1, NULL, | 259 | uevent_sock = netlink_kernel_create(NETLINK_KOBJECT_UEVENT, 1, NULL, |
@@ -264,5 +269,6 @@ static int __init kobject_uevent_init(void) | |||
264 | } | 269 | } |
265 | 270 | ||
266 | postcore_initcall(kobject_uevent_init); | 271 | postcore_initcall(kobject_uevent_init); |
272 | #endif | ||
267 | 273 | ||
268 | #endif /* CONFIG_HOTPLUG */ | 274 | #endif /* CONFIG_HOTPLUG */ |