diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-07-26 02:06:24 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-07-26 02:06:24 -0400 |
commit | f0deb97ab13ad1f89cd0993f7339655d59788405 (patch) | |
tree | 41572e643cb4983115707ae330b5896ae76e1ea1 /drivers | |
parent | 184475029a724b6b900d88fc3a5f462a6107d5af (diff) | |
parent | 21d541aa19e90752232bf6c43002f019f204f988 (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/Kconfig | 64 | ||||
-rw-r--r-- | drivers/firmware/google/gsmi.c | 19 | ||||
-rw-r--r-- | drivers/misc/pti.c | 6 | ||||
-rw-r--r-- | drivers/uio/uio_pdrv_genirq.c | 43 |
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 | |||
19 | config DEVTMPFS | 24 | config 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 | ||
72 | config FW_LOADER | 77 | config 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 | ||
80 | config FIRMWARE_IN_KERNEL | 85 | config 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 | ||
132 | config EXTRA_FIRMWARE_DIR | 137 | config 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 | ||
144 | config DEBUG_DRIVER | 148 | config 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: | 909 | out_remove_sysfs_files: |
910 | sysfs_remove_files(gsmi_kobj, gsmi_attrs); | ||
911 | out_remove_bin_file: | ||
912 | sysfs_remove_bin_file(gsmi_kobj, &eventlog_bin_attr); | ||
913 | out_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 | ||
28 | struct uio_pdrv_genirq_platdata { | 32 | struct 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 | ||
256 | static const struct of_device_id __devinitconst uio_of_genirq_match[] = { | ||
257 | { /* empty for now */ }, | ||
258 | }; | ||
259 | MODULE_DEVICE_TABLE(of, uio_of_genirq_match); | ||
260 | #else | ||
261 | # define uio_of_genirq_match NULL | ||
262 | #endif | ||
263 | |||
222 | static struct platform_driver uio_pdrv_genirq = { | 264 | static 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 | ||