aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-07-26 02:06:24 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-07-26 02:06:24 -0400
commitf0deb97ab13ad1f89cd0993f7339655d59788405 (patch)
tree41572e643cb4983115707ae330b5896ae76e1ea1 /drivers
parent184475029a724b6b900d88fc3a5f462a6107d5af (diff)
parent21d541aa19e90752232bf6c43002f019f204f988 (diff)
Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6
* 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6: updated Documentation/ja_JP/SubmittingPatches debugfs: add documentation for debugfs_create_x64 uio: uio_pdrv_genirq: Add OF support firmware: gsmi: remove sysfs entries when unload the module Documentation/zh_CN: Fix messy code file email-clients.txt driver core: add more help description for "path to uevent helper" driver-core: modify FIRMWARE_IN_KERNEL help message driver-core: Kconfig grammar corrections in firmware configuration DOCUMENTATION: Replace create_device() with device_create(). DOCUMENTATION: Update overview.txt in Doc/driver-model. pti: pti_tty_install documentation mispelling.
Diffstat (limited to 'drivers')
-rw-r--r--drivers/base/Kconfig64
-rw-r--r--drivers/firmware/google/gsmi.c19
-rw-r--r--drivers/misc/pti.c6
-rw-r--r--drivers/uio/uio_pdrv_genirq.c43
4 files changed, 93 insertions, 39 deletions
diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
index b605d01f5d45..21cf46f45245 100644
--- a/drivers/base/Kconfig
+++ b/drivers/base/Kconfig
@@ -16,6 +16,11 @@ config UEVENT_HELPER_PATH
16 that it creates a high system load, or on smaller systems 16 that it creates a high system load, or on smaller systems
17 it is known to create out-of-memory situations during bootup. 17 it is known to create out-of-memory situations during bootup.
18 18
19 To disable user space helper program execution at early boot
20 time specify an empty string here. This setting can be altered
21 via /proc/sys/kernel/hotplug or via /sys/kernel/uevent_helper
22 later at runtime.
23
19config DEVTMPFS 24config DEVTMPFS
20 bool "Maintain a devtmpfs filesystem to mount at /dev" 25 bool "Maintain a devtmpfs filesystem to mount at /dev"
21 depends on HOTPLUG 26 depends on HOTPLUG
@@ -65,17 +70,17 @@ config PREVENT_FIRMWARE_BUILD
65 default y 70 default y
66 help 71 help
67 Say yes to avoid building firmware. Firmware is usually shipped 72 Say yes to avoid building firmware. Firmware is usually shipped
68 with the driver, and only when updating the firmware a rebuild 73 with the driver and only when updating the firmware should a
69 should be made. 74 rebuild be made.
70 If unsure say Y here. 75 If unsure, say Y here.
71 76
72config FW_LOADER 77config FW_LOADER
73 tristate "Userspace firmware loading support" if EXPERT 78 tristate "Userspace firmware loading support" if EXPERT
74 default y 79 default y
75 ---help--- 80 ---help---
76 This option is provided for the case where no in-kernel-tree modules 81 This option is provided for the case where none of the in-tree modules
77 require userspace firmware loading support, but a module built outside 82 require userspace firmware loading support, but a module built
78 the kernel tree does. 83 out-of-tree does.
79 84
80config FIRMWARE_IN_KERNEL 85config FIRMWARE_IN_KERNEL
81 bool "Include in-kernel firmware blobs in kernel binary" 86 bool "Include in-kernel firmware blobs in kernel binary"
@@ -83,22 +88,22 @@ config FIRMWARE_IN_KERNEL
83 default y 88 default y
84 help 89 help
85 The kernel source tree includes a number of firmware 'blobs' 90 The kernel source tree includes a number of firmware 'blobs'
86 which are used by various drivers. The recommended way to 91 that are used by various drivers. The recommended way to
87 use these is to run "make firmware_install" and to copy the 92 use these is to run "make firmware_install", which, after
88 resulting binary files created in usr/lib/firmware directory 93 converting ihex files to binary, copies all of the needed
89 of the kernel tree to the /lib/firmware on your system so 94 binary files in firmware/ to /lib/firmware/ on your system so
90 that they can be loaded by userspace helpers on request. 95 that they can be loaded by userspace helpers on request.
91 96
92 Enabling this option will build each required firmware blob 97 Enabling this option will build each required firmware blob
93 into the kernel directly, where request_firmware() will find 98 into the kernel directly, where request_firmware() will find
94 them without having to call out to userspace. This may be 99 them without having to call out to userspace. This may be
95 useful if your root file system requires a device which uses 100 useful if your root file system requires a device that uses
96 such firmware, and do not wish to use an initrd. 101 such firmware and do not wish to use an initrd.
97 102
98 This single option controls the inclusion of firmware for 103 This single option controls the inclusion of firmware for
99 every driver which uses request_firmware() and ships its 104 every driver that uses request_firmware() and ships its
100 firmware in the kernel source tree, to avoid a proliferation 105 firmware in the kernel source tree, which avoids a
101 of 'Include firmware for xxx device' options. 106 proliferation of 'Include firmware for xxx device' options.
102 107
103 Say 'N' and let firmware be loaded from userspace. 108 Say 'N' and let firmware be loaded from userspace.
104 109
@@ -106,27 +111,27 @@ config EXTRA_FIRMWARE
106 string "External firmware blobs to build into the kernel binary" 111 string "External firmware blobs to build into the kernel binary"
107 depends on FW_LOADER 112 depends on FW_LOADER
108 help 113 help
109 This option allows firmware to be built into the kernel, for the 114 This option allows firmware to be built into the kernel for the case
110 cases where the user either cannot or doesn't want to provide it from 115 where the user either cannot or doesn't want to provide it from
111 userspace at runtime (for example, when the firmware in question is 116 userspace at runtime (for example, when the firmware in question is
112 required for accessing the boot device, and the user doesn't want to 117 required for accessing the boot device, and the user doesn't want to
113 use an initrd). 118 use an initrd).
114 119
115 This option is a string, and takes the (space-separated) names of the 120 This option is a string and takes the (space-separated) names of the
116 firmware files -- the same names which appear in MODULE_FIRMWARE() 121 firmware files -- the same names that appear in MODULE_FIRMWARE()
117 and request_firmware() in the source. These files should exist under 122 and request_firmware() in the source. These files should exist under
118 the directory specified by the EXTRA_FIRMWARE_DIR option, which is 123 the directory specified by the EXTRA_FIRMWARE_DIR option, which is
119 by default the firmware/ subdirectory of the kernel source tree. 124 by default the firmware subdirectory of the kernel source tree.
120 125
121 So, for example, you might set CONFIG_EXTRA_FIRMWARE="usb8388.bin", 126 For example, you might set CONFIG_EXTRA_FIRMWARE="usb8388.bin", copy
122 copy the usb8388.bin file into the firmware/ directory, and build the 127 the usb8388.bin file into the firmware directory, and build the kernel.
123 kernel. Then any request_firmware("usb8388.bin") will be 128 Then any request_firmware("usb8388.bin") will be satisfied internally
124 satisfied internally without needing to call out to userspace. 129 without needing to call out to userspace.
125 130
126 WARNING: If you include additional firmware files into your binary 131 WARNING: If you include additional firmware files into your binary
127 kernel image which are not available under the terms of the GPL, 132 kernel image that are not available under the terms of the GPL,
128 then it may be a violation of the GPL to distribute the resulting 133 then it may be a violation of the GPL to distribute the resulting
129 image -- since it combines both GPL and non-GPL work. You should 134 image since it combines both GPL and non-GPL work. You should
130 consult a lawyer of your own before distributing such an image. 135 consult a lawyer of your own before distributing such an image.
131 136
132config EXTRA_FIRMWARE_DIR 137config EXTRA_FIRMWARE_DIR
@@ -136,10 +141,9 @@ config EXTRA_FIRMWARE_DIR
136 help 141 help
137 This option controls the directory in which the kernel build system 142 This option controls the directory in which the kernel build system
138 looks for the firmware files listed in the EXTRA_FIRMWARE option. 143 looks for the firmware files listed in the EXTRA_FIRMWARE option.
139 The default is the firmware/ directory in the kernel source tree, 144 The default is firmware/ in the kernel source tree, but by changing
140 but by changing this option you can point it elsewhere, such as 145 this option you can point it elsewhere, such as /lib/firmware/ or
141 the /lib/firmware/ directory or another separate directory 146 some other directory containing the firmware files.
142 containing firmware files.
143 147
144config DEBUG_DRIVER 148config DEBUG_DRIVER
145 bool "Driver Core verbose debug messages" 149 bool "Driver Core verbose debug messages"
diff --git a/drivers/firmware/google/gsmi.c b/drivers/firmware/google/gsmi.c
index fa7f0b3e81dd..68810fd1a59d 100644
--- a/drivers/firmware/google/gsmi.c
+++ b/drivers/firmware/google/gsmi.c
@@ -869,8 +869,6 @@ static __init int gsmi_init(void)
869 goto out_err; 869 goto out_err;
870 } 870 }
871 871
872 printk(KERN_INFO "gsmi version " DRIVER_VERSION " loaded\n");
873
874 /* Register in the firmware directory */ 872 /* Register in the firmware directory */
875 ret = -ENOMEM; 873 ret = -ENOMEM;
876 gsmi_kobj = kobject_create_and_add("gsmi", firmware_kobj); 874 gsmi_kobj = kobject_create_and_add("gsmi", firmware_kobj);
@@ -890,12 +888,13 @@ static __init int gsmi_init(void)
890 ret = sysfs_create_files(gsmi_kobj, gsmi_attrs); 888 ret = sysfs_create_files(gsmi_kobj, gsmi_attrs);
891 if (ret) { 889 if (ret) {
892 printk(KERN_INFO "gsmi: Failed to add attrs"); 890 printk(KERN_INFO "gsmi: Failed to add attrs");
893 goto out_err; 891 goto out_remove_bin_file;
894 } 892 }
895 893
896 if (register_efivars(&efivars, &efivar_ops, gsmi_kobj)) { 894 ret = register_efivars(&efivars, &efivar_ops, gsmi_kobj);
895 if (ret) {
897 printk(KERN_INFO "gsmi: Failed to register efivars\n"); 896 printk(KERN_INFO "gsmi: Failed to register efivars\n");
898 goto out_err; 897 goto out_remove_sysfs_files;
899 } 898 }
900 899
901 register_reboot_notifier(&gsmi_reboot_notifier); 900 register_reboot_notifier(&gsmi_reboot_notifier);
@@ -903,9 +902,15 @@ static __init int gsmi_init(void)
903 atomic_notifier_chain_register(&panic_notifier_list, 902 atomic_notifier_chain_register(&panic_notifier_list,
904 &gsmi_panic_notifier); 903 &gsmi_panic_notifier);
905 904
905 printk(KERN_INFO "gsmi version " DRIVER_VERSION " loaded\n");
906
906 return 0; 907 return 0;
907 908
908 out_err: 909out_remove_sysfs_files:
910 sysfs_remove_files(gsmi_kobj, gsmi_attrs);
911out_remove_bin_file:
912 sysfs_remove_bin_file(gsmi_kobj, &eventlog_bin_attr);
913out_err:
909 kobject_put(gsmi_kobj); 914 kobject_put(gsmi_kobj);
910 gsmi_buf_free(gsmi_dev.param_buf); 915 gsmi_buf_free(gsmi_dev.param_buf);
911 gsmi_buf_free(gsmi_dev.data_buf); 916 gsmi_buf_free(gsmi_dev.data_buf);
@@ -925,6 +930,8 @@ static void __exit gsmi_exit(void)
925 &gsmi_panic_notifier); 930 &gsmi_panic_notifier);
926 unregister_efivars(&efivars); 931 unregister_efivars(&efivars);
927 932
933 sysfs_remove_files(gsmi_kobj, gsmi_attrs);
934 sysfs_remove_bin_file(gsmi_kobj, &eventlog_bin_attr);
928 kobject_put(gsmi_kobj); 935 kobject_put(gsmi_kobj);
929 gsmi_buf_free(gsmi_dev.param_buf); 936 gsmi_buf_free(gsmi_dev.param_buf);
930 gsmi_buf_free(gsmi_dev.data_buf); 937 gsmi_buf_free(gsmi_dev.data_buf);
diff --git a/drivers/misc/pti.c b/drivers/misc/pti.c
index 374dfcfccd07..e5f295a38a34 100644
--- a/drivers/misc/pti.c
+++ b/drivers/misc/pti.c
@@ -445,9 +445,9 @@ static void pti_tty_driver_close(struct tty_struct *tty, struct file *filp)
445} 445}
446 446
447/** 447/**
448 * pti_tty_intstall()- Used to set up specific master-channels 448 * pti_tty_install()- Used to set up specific master-channels
449 * to tty ports for organizational purposes when 449 * to tty ports for organizational purposes when
450 * tracing viewed from debuging tools. 450 * tracing viewed from debuging tools.
451 * 451 *
452 * @driver: tty driver information. 452 * @driver: tty driver information.
453 * @tty: tty struct containing pti information. 453 * @tty: tty struct containing pti information.
diff --git a/drivers/uio/uio_pdrv_genirq.c b/drivers/uio/uio_pdrv_genirq.c
index 31e799d9efe5..bae96d246760 100644
--- a/drivers/uio/uio_pdrv_genirq.c
+++ b/drivers/uio/uio_pdrv_genirq.c
@@ -23,6 +23,10 @@
23#include <linux/pm_runtime.h> 23#include <linux/pm_runtime.h>
24#include <linux/slab.h> 24#include <linux/slab.h>
25 25
26#include <linux/of.h>
27#include <linux/of_platform.h>
28#include <linux/of_address.h>
29
26#define DRIVER_NAME "uio_pdrv_genirq" 30#define DRIVER_NAME "uio_pdrv_genirq"
27 31
28struct uio_pdrv_genirq_platdata { 32struct uio_pdrv_genirq_platdata {
@@ -97,6 +101,27 @@ static int uio_pdrv_genirq_probe(struct platform_device *pdev)
97 int ret = -EINVAL; 101 int ret = -EINVAL;
98 int i; 102 int i;
99 103
104 if (!uioinfo) {
105 int irq;
106
107 /* alloc uioinfo for one device */
108 uioinfo = kzalloc(sizeof(*uioinfo), GFP_KERNEL);
109 if (!uioinfo) {
110 ret = -ENOMEM;
111 dev_err(&pdev->dev, "unable to kmalloc\n");
112 goto bad2;
113 }
114 uioinfo->name = pdev->dev.of_node->name;
115 uioinfo->version = "devicetree";
116
117 /* Multiple IRQs are not supported */
118 irq = platform_get_irq(pdev, 0);
119 if (irq == -ENXIO)
120 uioinfo->irq = UIO_IRQ_NONE;
121 else
122 uioinfo->irq = irq;
123 }
124
100 if (!uioinfo || !uioinfo->name || !uioinfo->version) { 125 if (!uioinfo || !uioinfo->name || !uioinfo->version) {
101 dev_err(&pdev->dev, "missing platform_data\n"); 126 dev_err(&pdev->dev, "missing platform_data\n");
102 goto bad0; 127 goto bad0;
@@ -180,6 +205,10 @@ static int uio_pdrv_genirq_probe(struct platform_device *pdev)
180 kfree(priv); 205 kfree(priv);
181 pm_runtime_disable(&pdev->dev); 206 pm_runtime_disable(&pdev->dev);
182 bad0: 207 bad0:
208 /* kfree uioinfo for OF */
209 if (pdev->dev.of_node)
210 kfree(uioinfo);
211 bad2:
183 return ret; 212 return ret;
184} 213}
185 214
@@ -193,6 +222,10 @@ static int uio_pdrv_genirq_remove(struct platform_device *pdev)
193 priv->uioinfo->handler = NULL; 222 priv->uioinfo->handler = NULL;
194 priv->uioinfo->irqcontrol = NULL; 223 priv->uioinfo->irqcontrol = NULL;
195 224
225 /* kfree uioinfo for OF */
226 if (pdev->dev.of_node)
227 kfree(priv->uioinfo);
228
196 kfree(priv); 229 kfree(priv);
197 return 0; 230 return 0;
198} 231}
@@ -219,6 +252,15 @@ static const struct dev_pm_ops uio_pdrv_genirq_dev_pm_ops = {
219 .runtime_resume = uio_pdrv_genirq_runtime_nop, 252 .runtime_resume = uio_pdrv_genirq_runtime_nop,
220}; 253};
221 254
255#ifdef CONFIG_OF
256static const struct of_device_id __devinitconst uio_of_genirq_match[] = {
257 { /* empty for now */ },
258};
259MODULE_DEVICE_TABLE(of, uio_of_genirq_match);
260#else
261# define uio_of_genirq_match NULL
262#endif
263
222static struct platform_driver uio_pdrv_genirq = { 264static struct platform_driver uio_pdrv_genirq = {
223 .probe = uio_pdrv_genirq_probe, 265 .probe = uio_pdrv_genirq_probe,
224 .remove = uio_pdrv_genirq_remove, 266 .remove = uio_pdrv_genirq_remove,
@@ -226,6 +268,7 @@ static struct platform_driver uio_pdrv_genirq = {
226 .name = DRIVER_NAME, 268 .name = DRIVER_NAME,
227 .owner = THIS_MODULE, 269 .owner = THIS_MODULE,
228 .pm = &uio_pdrv_genirq_dev_pm_ops, 270 .pm = &uio_pdrv_genirq_dev_pm_ops,
271 .of_match_table = uio_of_genirq_match,
229 }, 272 },
230}; 273};
231 274