|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* ?/ m* f8 V" i" Y# R2 P a
#include <linux/init.h>, G2 Y6 {* F& u: }% Z. `6 b
#include <linux/module.h>( j5 b+ |; ~+ q/ g% h! P# X" E
#include <linux/kernel.h>9 `" J" B, {9 X w/ z0 ?
#include <linux/types.h>, v, a5 l" F1 f: K4 x* R$ V. ^9 }' x; t
#include <linux/gpio.h>
1 o3 X3 @& a) k. W#include <linux/leds.h>
7 d( {0 M' |1 f2 o" \#include <linux/platform_device.h>3 Q' P3 u) k# w+ j$ K" A
) M% v6 e0 u( ]: a
#include <asm/mach-types.h>
+ i- J/ O2 @0 S9 ^#include <asm/mach/arch.h>
/ S+ B/ r0 p+ {, w/ W2 S5 s#include <mach/da8xx.h>
3 b1 @3 D+ D7 M2 [#include <mach/mux.h>0 ^, Y6 _- t2 S+ O+ Q6 w5 c4 r1 l
! s& Q5 o8 C: @5 N: ?#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. N1 x4 z! D# y2 x# w$ J$ u6 }#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 P1 O; H/ N- z& C+ E0 t' B
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 W) h; j: S5 A6 A. S" {#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) @( f$ ^: s* P6 b" p$ r
) K a! f' g: W/ Q/* assign the tl som board LED-GPIOs*/. D4 O: Q4 x4 C) p3 N, E
static const short da850_evm_tl_user_led_pins[] = {. h7 s3 n9 O# V" Q
/* These pins are definition at <mach/mux.h> file */) ~& ~& ]9 q' ~- v* L# j2 |+ ^5 p
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' G4 R) h8 I/ { u) x: s2 x -1* R1 \! Q6 l* T+ Z7 K% H/ J
};
' h4 f8 h5 i- `5 Y5 a& f9 k4 ^' g& f' L8 G9 R5 e/ Z
static struct gpio_led da850_evm_tl_leds[] = {1 \/ H+ W Z/ p1 j
{$ E% s) G. Z O+ g9 @7 Z# ~
.active_low = 0,
( u5 T6 Y3 R$ @9 f: Z* b$ H .gpio = DA850_USER_LED0,
7 m' [" P; X- M2 F- k9 o6 h .name = "user_led0",
; O% g( r) k1 K. T/ V8 Z .default_trigger = "default-on",
: b6 q0 u; K5 w5 ]" m },* ^& y2 E# O- ~7 H2 R$ g) l, X$ H3 n
{3 Q5 {. f1 M% c8 F+ B2 b
.active_low = 0,+ T- {# I3 [& R$ r
.gpio = DA850_USER_LED1,4 [1 y2 ^8 h( @* R
.name = "user_led1",
) S+ L4 v( a8 q" D1 Z1 _8 o8 M/ p .default_trigger = "default-on",
+ O/ J) R9 C6 a },! H& I* P: Y+ N% h) X' P7 E
{/ j' g* V# z V: {- d% H' C! f
.active_low = 0,
3 L% c5 | H5 n .gpio = DA850_USER_LED2,- ^( I6 i, \& ^
.name = "user_led2",
8 w0 R& r3 ~& d# @0 e% F: `0 ~ .default_trigger = "default-on",
( X' a5 @3 s# |6 I$ h/ w },$ j- r5 n! @, }. ?
{/ X$ h9 k+ }0 ^ w3 P6 P
.active_low = 0,
j8 w1 ^% c% O* u .gpio = DA850_USER_LED3,
* d. E) p8 F& B$ { .name = "user_led3",
* ^# h3 G& m; m, |& K5 i3 t .default_trigger = "default-on",5 p2 e' Z8 V* P& s: y9 A4 d w" V
},
- H1 h. f; X- a' s" B9 J8 h1 P8 A};
& v5 W% Q3 R1 Q, U% t6 q% s" M; |% }
6 ~0 O. i5 i# R3 u6 I6 g9 vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ T- m% ^3 B7 R .leds = da850_evm_tl_leds,
0 g4 i1 K9 ?5 }' ~3 s' R .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 s+ d6 W& d4 ?/ q+ t};
% P" H4 x/ [: e; u( P B2 `% B$ ?5 k8 L' z* J, U, v; Q
static void led_dev_release(struct device *dev)' B0 ]. B+ U2 m+ l) O+ {. @
{5 a* s! l8 n Y) i* }: y
};
0 i" [. M- g' Q
! \! ~ P q- c7 bstatic struct platform_device da850_evm_tl_leds_device = {
; _! f% P8 L( M .name = "leds-gpio",
" G7 c7 T5 a) y/ w .id = 1,5 o, F9 V# t. s+ m2 v
.dev = {. C- X1 y, {& }
.platform_data = &da850_evm_tl_leds_pdata,! \& y6 E+ x( W' o5 g+ m9 \1 L9 {
.release = led_dev_release,6 b- |6 |, b0 _9 s/ N
}
+ X0 }7 P8 }0 p- m V};
0 Y" w( C6 G0 M; F2 G
: W. Y1 w/ @4 |* Estatic int __init led_platform_init(void)6 h" h8 V+ p$ e+ u
{
2 @2 q5 g$ K! a7 Q5 T int ret;6 Z. g; }% Z5 a' A
#if 0! A- C" ?2 h' L1 _
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. B" K( K$ A+ _0 I- e. s if (ret)
) m: N* k9 s8 F' K pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 p/ e( Y$ R2 C3 f& i "%d\n", ret);, O5 B1 K, b3 u0 l' R+ I7 M9 o
#endif: }% I b c5 G; Y1 o! V
ret = platform_device_register(&da850_evm_tl_leds_device);
9 C* }* y8 m* N1 M& A if (ret)
$ h1 W& x' p8 \' _ pr_warning("Could not register som GPIO expander LEDS");
/ O+ y' c8 D' U8 ^% v. ?* J else
' a1 W8 q( O- H, \! O# K6 o printk(KERN_INFO "LED register sucessful!\n");
, K* T5 v" D x( M. ]! ^: H' D6 |6 P' f" U
return ret;
- S- ^+ P9 n% ^# I3 k! [ s}# L, @7 |. \, k' q$ L) u
" C: {4 x0 N: z- o/ N! r( Xstatic void __exit led_platform_exit(void)
3 {2 Q7 \; P1 |0 U0 Y i6 Q{
6 p$ V9 z$ S( \ platform_device_unregister(&da850_evm_tl_leds_device);/ V6 i/ C( W( }) J1 L, Q& S$ R
* E8 a8 @* j p( Z5 K: l
printk(KERN_INFO "LED unregister!\n");
% E+ _: q; v. `* ?* ^5 @4 L}4 u9 Y2 v0 A H4 [1 n( M
! _! ~5 u {% \module_init(led_platform_init);
7 M: W6 x2 L' M7 S% H6 K' \module_exit(led_platform_exit);4 ], N& e1 B( i
/ F2 _2 S( ^7 F7 q1 ]2 e jMODULE_DESCRIPTION("Led platform driver");2 A h8 m- b8 v G
MODULE_AUTHOR("Tronlong");3 U1 [6 S, ?; u z# Z `% t
MODULE_LICENSE("GPL");
3 S. U# j& i( |/ Z) D+ g {) M- l) o4 C3 X: U1 p/ G5 v! d. E
|
|