|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ L/ ~" G* x G, a& N% q& z8 Z3 O- |
#include <linux/init.h>* y9 f, C b7 @$ {- F4 Y, T
#include <linux/module.h>& T6 K1 _& U3 C- J6 t
#include <linux/kernel.h>
7 p, ^- y1 d _' i0 r+ y3 A: ?( v#include <linux/types.h>, O2 m, w0 L/ t8 M
#include <linux/gpio.h>
: w7 ], H) x- g. [8 ]#include <linux/leds.h>8 n/ c1 ?- F: d" p+ u9 G7 e
#include <linux/platform_device.h>
/ j7 i5 k+ U) ?( T4 Z# Q8 P: h5 H
#include <asm/mach-types.h>
# i( J. o& J1 M( R/ P5 R#include <asm/mach/arch.h>* F2 Q3 h, M1 E& K
#include <mach/da8xx.h>* O* n( {6 ^$ e: ~
#include <mach/mux.h>
$ o" T/ h. u+ s9 x$ w5 _* U/ {: ], U3 c8 _. |- F6 q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 o5 T- N9 |+ y' F' N/ r# o% d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), v- _) R" S5 ?% o
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 J- Z& G( p2 T6 B" y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) D+ L7 Z+ V& h! z
8 O6 P2 q8 M; q0 L* i/* assign the tl som board LED-GPIOs*/3 [4 M2 Q* U4 M+ y/ L
static const short da850_evm_tl_user_led_pins[] = {
/ Y9 r; X9 I' P+ K! D: V /* These pins are definition at <mach/mux.h> file */
# z" u1 l2 f' Y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," g/ _3 t% h- f- b5 f4 h7 {$ V
-13 G" z/ t9 |' x$ A
};
+ e- v! |2 r9 L0 K2 k) v {
+ i2 Y2 i# q4 o/ k0 S, j* zstatic struct gpio_led da850_evm_tl_leds[] = {3 n- X& ]1 H5 T: M: J( w' J$ E
{
; b5 c i: Y/ m9 m5 f .active_low = 0,2 c: J! P/ `4 h$ O0 K
.gpio = DA850_USER_LED0, W5 N4 e+ ^6 ~& z0 _
.name = "user_led0",
$ _2 r$ A4 ?$ Y) x ?* e4 M! i: J6 g .default_trigger = "default-on",% A# }# b6 e0 N
},5 d3 T1 ]" e' B4 Q: O E& E
{% z8 j. a$ x0 E' J- D
.active_low = 0,7 v2 Y2 w3 \( x, o* _! Y' R
.gpio = DA850_USER_LED1,3 r5 w4 f" O) X
.name = "user_led1",
* ~4 J& e+ f2 X. \ .default_trigger = "default-on",. C7 V, u+ {' i7 y' h, i
},+ A* u) [/ B6 L- ~
{
; I9 s: f% I% j5 K+ K9 u .active_low = 0,
) ^5 o/ g" P: b7 D .gpio = DA850_USER_LED2,! g* G" C& S3 W8 O) S
.name = "user_led2",
6 ~: q% l- S/ m f& M) Y .default_trigger = "default-on",
. G2 [, G I: D- n l/ _) L },
: ^' s: f' }8 k" t {
) K8 x- c2 h' [4 R6 a& g. C6 R .active_low = 0,
3 S+ g' w% r* F& Y2 |+ v/ I .gpio = DA850_USER_LED3,
2 \$ o( \, M; g5 T! F6 ]; Z .name = "user_led3",& X; z# _% T% M, `& h7 X- g3 j% W
.default_trigger = "default-on",, k6 o. S( a5 L! A/ f8 N
},
% x+ C- P; V6 s$ @( x9 z; f/ }};0 Z1 \, s' J2 f+ z" A/ M8 ?
( I- {" j7 q" S
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, C: n3 Q G8 r' X- J$ N .leds = da850_evm_tl_leds,
4 S% F' H: n: h .num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 j5 o8 Q4 G, G, B, X. D
};, b" w9 A: Z6 R% }9 ?
) ]" w \9 o3 s0 {8 A2 estatic void led_dev_release(struct device *dev)
/ J; |% V1 G/ z9 i; O3 o. k& ]{; ]3 V7 O* [, z4 K9 e8 j4 M
};) l6 |, S/ O8 T! V. n0 _
6 F. g, h5 ^* c) I) u
static struct platform_device da850_evm_tl_leds_device = {
$ h, s: j# ?7 L. ]# z0 k .name = "leds-gpio",
, m" D1 I$ \- \4 w& G. |- E0 i .id = 1,8 S6 t% F: \: ]9 L) n
.dev = {
0 C9 P7 v% s. }- ` .platform_data = &da850_evm_tl_leds_pdata,
% r# u$ q% t* `! y( ~: R# r2 I .release = led_dev_release,# H1 D- T$ f5 J
}! l/ D, ]4 B8 y# {7 L M5 m) _
};
. v- Q" g1 k9 `# y8 j: E: ]- j& Q2 a' h5 c ]4 E
static int __init led_platform_init(void)
7 M5 P7 ^! {# A7 s{
% w# B0 G" p2 \: P+ j4 @- F$ ?) N int ret;' x# T! L1 [% `; c; E
#if 0
1 M1 v; b- O* ]0 o" F1 ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( Y' I) p" n' k) g! ^9 S. M if (ret)
2 U7 i! _2 a/ f6 \4 I. A# S pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ R; [" [. D5 K( C% ]! W
"%d\n", ret);/ l3 _9 X0 L7 f/ @. z# P, u
#endif
& K( |( q, W q ret = platform_device_register(&da850_evm_tl_leds_device);# |; l+ E. ?4 H5 y# N
if (ret)5 T, K) i! M* x6 d3 k* o7 Z v
pr_warning("Could not register som GPIO expander LEDS");$ {: \" B9 j8 A) x/ e
else9 c0 v; ]0 k/ b' ^4 o6 g
printk(KERN_INFO "LED register sucessful!\n");- n$ o; X: f! P( Z0 b+ L1 j2 W
9 @. ]/ O: y" b5 V return ret;8 ?+ h3 _8 P- k+ H; s' z$ r: D6 c
}1 m0 U( E& |2 M2 L9 `6 R
" ~& }4 j3 j# E7 Y5 H O0 R% _1 O
static void __exit led_platform_exit(void)( L6 ~4 k) o6 D) f: E' ?) c
{
& A |' c7 e$ J platform_device_unregister(&da850_evm_tl_leds_device);! x7 V" `9 m [4 H6 B
" X: \; E1 z1 E( u
printk(KERN_INFO "LED unregister!\n");1 m+ Y, g3 Y/ M; G2 @$ f
}
) G+ W5 ~) ]5 u7 E+ [9 Q" X
( i* y# ?& ^" ?2 _ g: r' }module_init(led_platform_init);2 u# `0 f$ |& A! A
module_exit(led_platform_exit);: B3 U* z% f" q" `! ]' o
: W: I0 d6 A$ V/ bMODULE_DESCRIPTION("Led platform driver");4 A" s% Z( ^ y+ N
MODULE_AUTHOR("Tronlong");4 _$ C2 U8 [7 U! S
MODULE_LICENSE("GPL");
/ W, D4 q+ E) X2 l8 T+ w& F" m2 }; p- o% \2 {
|
|