|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) w* |5 [8 B* s% J
#include <linux/init.h>% t, M0 A6 V6 s2 E3 o, K! a D
#include <linux/module.h>, ^: d3 g+ c1 L' ~" | P/ k$ i
#include <linux/kernel.h>
: D9 |$ a& m( n5 E8 d" ^0 l#include <linux/types.h>
3 \2 l u7 e! z" h" C( x3 |+ M: c#include <linux/gpio.h>" k9 g2 y5 z* y7 }
#include <linux/leds.h>5 M" i1 q8 R$ h8 ^# B' E
#include <linux/platform_device.h># x+ w# n) Y6 m3 `' r
3 y# D! g& l- O& N
#include <asm/mach-types.h>/ [) A2 d0 M0 z8 W9 n
#include <asm/mach/arch.h>
+ Z# k2 m% F1 [0 d#include <mach/da8xx.h>. E" h! v# E. B4 P
#include <mach/mux.h>
1 m% ~; l& p9 y2 o9 F' N+ n/ W6 [4 J6 K$ n4 U; \" }% j* ^
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 ?' Z5 M$ z; e1 x! D, [7 Z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 i. q3 ^0 m) i7 q6 c- D& @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& B4 x! o# x+ g; [# e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% T; g; C2 L! u j5 j# h! U. Z) I/ w0 @7 P0 Q4 {5 i4 s. l
/* assign the tl som board LED-GPIOs*/
( ~) z" `, T( c# p+ O- Z G+ Lstatic const short da850_evm_tl_user_led_pins[] = {
; A% P! d2 Y/ j. A! ?3 h /* These pins are definition at <mach/mux.h> file */
& P* a0 [) g- f* N9 S DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' ~9 {* @ x1 B. U( P -1
4 Q5 q V5 N' u" ^; ?" ]};) Y% t! ]5 S2 F7 J+ k: ^- \0 ~# |
( B/ Z3 q$ r( ~/ m# `% I7 w+ L: {static struct gpio_led da850_evm_tl_leds[] = {% G( X5 u4 R E3 p% f
{
! G' S; r& C2 Z5 ^( c! v e .active_low = 0," W, v5 O3 Y+ A0 F ^
.gpio = DA850_USER_LED0,0 C. q. y' A+ a* V. L" b' Q
.name = "user_led0",+ L9 @6 e+ ~+ ?5 o5 {% x
.default_trigger = "default-on",
' b: [6 Q% Y3 M% g/ {( Y2 @ },* [6 T2 j# U z- u3 Q4 y6 w
{
" G4 R3 m/ B' A2 Z: a; ? .active_low = 0,1 e% Q: ^& ?) C# y3 f+ L
.gpio = DA850_USER_LED1,0 W9 _4 V o T9 j3 y5 o0 j
.name = "user_led1",
9 U3 h, |6 R! r* n4 L9 ?& k .default_trigger = "default-on",; g. `% c' n* }9 m. L
},
5 X& G A/ K* h: x, i {7 e6 f& E6 Q- X$ Z {& S" Q- ^
.active_low = 0,6 e8 j! g6 }% S
.gpio = DA850_USER_LED2,
& { F! C R1 V( u5 x .name = "user_led2",
! y& {1 t; I0 Q3 F2 E5 T .default_trigger = "default-on",3 Y. k* r s$ S: \1 I4 u( x: W5 O
},. t! o3 j" u, j( s( L' u, Y: r4 J
{& T H3 g8 X) I- g, i. L8 K- B
.active_low = 0,4 r" f0 m' V# Q, u' b6 K: Z8 m$ o8 _
.gpio = DA850_USER_LED3,
! b |! h# s. g4 G% q U .name = "user_led3",2 v! }: N# H" L" A/ n$ H# }
.default_trigger = "default-on",- X' R9 n' ]7 ^ o( Z" R
},5 m8 ^7 `" U' D6 B1 E) \
};
9 g, g# `( I( K1 x3 Q4 ~; l/ u
- l& r* T) r; H3 x+ tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# j$ c! G1 F6 ` q .leds = da850_evm_tl_leds,% m3 e7 \+ ]% l! M4 ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 S& @( r" B1 {2 L& U5 H};) N! Z7 r8 `, N) P
& c: R! Y: M6 o2 g9 v" Z: P* Mstatic void led_dev_release(struct device *dev)6 ]/ D/ i/ n5 u: O$ b
{! I$ i# t1 {; v$ V) d8 U
};0 d. ~! `1 z. }* Z5 A
- i; T/ X" u: l& Xstatic struct platform_device da850_evm_tl_leds_device = {9 [0 A$ z( ~, ]7 ~
.name = "leds-gpio",
% Z: ~# L5 P# H: u8 ] .id = 1,
1 J+ l) J: f* l0 r7 j) E' h" T" m) [ .dev = { x; u. ?# b% w( v/ m
.platform_data = &da850_evm_tl_leds_pdata,+ P, \* m/ M7 s( ^( Q
.release = led_dev_release,
9 e4 C( T0 z! K5 M1 I, K }
& q0 v" X+ g7 S( W( M};8 L) A) V- T! K4 Q% `$ a
0 k6 B. B) s# j9 Lstatic int __init led_platform_init(void)
6 w: Z: w1 _! _( o/ J{
8 I$ H$ |: Q% i$ b$ m int ret;
' ?" p2 I1 u% u. g#if 0
/ G7 b8 u# P6 |" Q" e ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. {# k( d0 V9 w& _! V: P1 f8 P
if (ret)2 J, }$ y0 I& J- Q; ~- Q4 A! K% h
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 S8 r( q2 I& E, k# A, d& h "%d\n", ret);) @( ^* E- x; x4 M1 a" h4 s
#endif: \+ A C3 M2 n
ret = platform_device_register(&da850_evm_tl_leds_device);0 y3 K! t: k# L+ G: D/ w3 _# S
if (ret)
0 K! b8 W5 g7 l, Z* ] pr_warning("Could not register som GPIO expander LEDS");$ f1 }- [+ }7 n
else+ B; t( H) v; |1 k T! o
printk(KERN_INFO "LED register sucessful!\n");
/ ^# k& Q" w9 @! G8 Y1 U
+ q- G+ W: [( i) M l! r2 _ return ret;
8 ?# C. U+ T v% y6 S}/ i( P1 ] @% o- W7 b
6 `4 H# R+ p. j! v. K
static void __exit led_platform_exit(void)+ E2 [0 g+ C3 A- [) E
{0 X+ d2 K4 j+ W: y& E9 \1 D
platform_device_unregister(&da850_evm_tl_leds_device);
( Q5 I$ r# P* D: B: t6 @4 j: {- ?
printk(KERN_INFO "LED unregister!\n");
9 z% v: ~6 S3 u/ ^, f: m1 M}
6 n2 r7 q2 g! n& w- {" V5 P4 p+ ]
/ A' [- O4 ^' Y5 j4 }6 Zmodule_init(led_platform_init);
2 b& ]3 C" Z, f+ v. J$ Y6 g d% u* omodule_exit(led_platform_exit);4 A ^- g. n$ ~5 i% f. L' m- l/ P
% n; d0 Y. a9 f& C+ y- a/ l5 s& i
MODULE_DESCRIPTION("Led platform driver");
: M8 O' S" o% q% UMODULE_AUTHOR("Tronlong");
@ _. B4 T; R* w o- ?MODULE_LICENSE("GPL");
2 X) q1 U' X3 ^2 Y) W& R5 ^4 h
+ h) t/ C! K8 X |
|