|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 q- R2 F% N" {+ ]# A6 U, N6 ~3 X
#include <linux/init.h>8 w+ ~( v/ T! u* ^
#include <linux/module.h>
+ g- r3 s3 i/ e9 l#include <linux/kernel.h>
8 b9 F. Z. E! E( |/ W+ A#include <linux/types.h>
# ]9 g+ G3 { r" b' a' O) [: g#include <linux/gpio.h>
( ?% Z4 r3 w* L W) g#include <linux/leds.h>
7 R; | e) g& _#include <linux/platform_device.h>
, j5 `: |1 K% ^: L9 @& e! p& y: j* }7 z% ?7 E# z
#include <asm/mach-types.h>% ]* v/ n& Q7 \0 |' V% a3 _8 v8 }
#include <asm/mach/arch.h>
1 D" p6 w0 r* n8 B) y9 R#include <mach/da8xx.h>* a& a3 H/ g0 z
#include <mach/mux.h>
& D* A3 Q: r$ M3 z' O% R% g
0 }7 c8 V( V6 N#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 ~: x% x0 u4 t8 ^: c4 {
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ k! p& r9 y% z$ A6 w3 M! |( u#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). E. p: @6 V, }5 n, I% Z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" f$ K Q# j* e
2 V& z- ] [% Q3 H
/* assign the tl som board LED-GPIOs*/
2 z( N; l: O4 J4 B5 e" lstatic const short da850_evm_tl_user_led_pins[] = {
' F0 j* `2 `0 Q; Z /* These pins are definition at <mach/mux.h> file */
$ O: @# N3 o# [' ]4 O DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ r) @5 B/ @) E+ t" V -1# `& Q3 F$ G/ S4 j3 D4 o
};3 m/ A4 ~1 S H+ E2 W0 A
- O+ f# I6 _ r% n' ?: f# cstatic struct gpio_led da850_evm_tl_leds[] = {& e8 m7 ]' j! A. F4 @7 [& L
{9 z" f! S# \ \! M! R) X2 m1 r
.active_low = 0,
3 R' r- E; I$ i( m% { .gpio = DA850_USER_LED0,8 G! U$ y$ [/ u1 Z+ J1 [
.name = "user_led0",
) T7 p, R# i$ _+ z- y6 k .default_trigger = "default-on",% q7 B8 ^ H% y/ |6 a. ^
},7 \$ F- \4 M, S
{
0 U5 Z# n6 o+ g/ `8 `0 ]0 z" k, A .active_low = 0,
' m, Y# a! W- h .gpio = DA850_USER_LED1,
6 Z6 i/ [9 h3 P .name = "user_led1",/ v) m% }3 C/ I, F
.default_trigger = "default-on",
# R# B4 o8 `% k2 y5 C },# q/ u) y9 [4 e8 m* S7 o
{! L; F' I3 j; a
.active_low = 0,
& L0 [: W2 h# d+ y' _ .gpio = DA850_USER_LED2,
( i/ e1 t8 M# [- A6 E& P9 ]0 @ .name = "user_led2",
. G* Q' m( n" r4 h- o .default_trigger = "default-on",2 }0 C, [& c* d( V; H, Z0 j
},+ |3 t& h( I! a# } x: q
{
0 \% t+ ?7 k1 }7 n: q& G2 H .active_low = 0,0 a6 e3 D: E9 \! [* ]' v2 P
.gpio = DA850_USER_LED3,
+ [0 ]& f6 |# A% V7 e9 h2 r .name = "user_led3",
2 s) S9 I5 Z+ k .default_trigger = "default-on",# x. Q; T3 q+ M+ I0 D( q
},9 A: U o3 J( L Z* X
};
. t0 J5 C$ f; l6 @! i; b! E, M" M) \/ J7 f
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: S: i+ Y/ {, N) C
.leds = da850_evm_tl_leds,
' l2 A; O# n* p .num_leds = ARRAY_SIZE(da850_evm_tl_leds)," e5 Y" C1 A" w2 m+ F7 C
};8 o5 M7 W% V' ~/ }/ Z% m
5 U" F2 `- S6 b5 T4 t! o) t, rstatic void led_dev_release(struct device *dev)/ O3 ], N' M1 i$ l! M
{
( j3 j% C) b) J4 |5 a) p0 D! Q};
. l+ a$ D+ N. Q/ c9 W5 D8 f# q3 A- n; p! I9 X+ J- O8 y
static struct platform_device da850_evm_tl_leds_device = {6 ^% z& ^$ |' A5 f2 D0 d
.name = "leds-gpio",
/ x% ^( R: G; R+ I; M- S .id = 1,
+ t9 E' \) F9 b, v$ G% Q/ B% c .dev = {6 N6 G3 p* _3 z$ q: _
.platform_data = &da850_evm_tl_leds_pdata,
7 H( I+ [1 {/ K .release = led_dev_release,9 `1 E! h1 R" [. t* R+ N8 A! g
}: V4 h! k; t' Y4 Q* h& l
};
2 j' p$ V6 K3 Z l- C/ N# a; Q/ H, j9 T2 z. C _9 p8 N# z
static int __init led_platform_init(void)+ O1 c/ E+ N9 b, k. ?
{
- ?7 c9 K _) _ int ret;
/ i% v6 Q3 K1 d9 M& R- z# L1 s9 L#if 04 z4 m! z& M& s' l9 N) [
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 v- b( }- ~4 o" u
if (ret)
4 e* h6 T# J5 y3 V8 v pr_warning("da850_evm_tl_leds_init : User LED mux failed :"" z8 f9 L; o3 k- B0 T
"%d\n", ret);
; ?) k) d6 l, K ?#endif( T% J9 p; K, @( j, g2 P
ret = platform_device_register(&da850_evm_tl_leds_device);
( F7 h# J9 m' H+ n" ^ if (ret)
7 M5 M8 B7 D3 c( p1 K- v2 q pr_warning("Could not register som GPIO expander LEDS");
9 l' G! c" v$ S6 t/ W3 v else( d: d6 V4 `+ G8 @" ]* X
printk(KERN_INFO "LED register sucessful!\n");
* \0 ~( d! Q/ V2 k, D( \7 k9 W0 g# A6 r7 w4 A( U
return ret;
. I2 C5 B4 J' Z1 v}# j4 v( h) i! b0 `
" ^8 l0 A" o& [( S7 B& [
static void __exit led_platform_exit(void)
- m6 j0 Q- O, W) m{
9 I9 H: i0 s' q/ `7 V+ z platform_device_unregister(&da850_evm_tl_leds_device);
, S, W" x, r |6 i! q5 K9 @ a0 P" i. e3 R5 t! h5 M
printk(KERN_INFO "LED unregister!\n");
4 E% R* Y4 v! K' a2 ?. h" S5 W}( S" e8 M! Y$ x# I/ |* L
: o: @1 ~; O1 S: X
module_init(led_platform_init);
% @6 Z" ~, J. Y N* Pmodule_exit(led_platform_exit);
3 \( z- s4 Q5 ^8 {% G' M( \! K7 p l, B# l: T- |- B$ s
MODULE_DESCRIPTION("Led platform driver");
; t0 S3 N. R! R* oMODULE_AUTHOR("Tronlong");: Y. z, K# ]! C& w3 ~) D! _
MODULE_LICENSE("GPL");! u/ P6 D! E7 ?! @
6 T [/ c4 m! W* n) n- Z: F |
|