|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% t: R5 ~; V) N1 P! I
#include <linux/init.h>' k9 {# k& t9 W: u
#include <linux/module.h>4 g, B6 w+ X! n, q8 j& a
#include <linux/kernel.h>
/ n$ }2 [7 T8 h T- x9 q) @#include <linux/types.h>
' ^! T5 D! Z1 A! N) O* n#include <linux/gpio.h>
7 `) f+ [# d4 t# Q0 W0 x#include <linux/leds.h>, z3 B i( J8 |2 X. m
#include <linux/platform_device.h>
; e, \9 H5 D7 G7 u3 N) b1 t9 a# p+ j( c
#include <asm/mach-types.h>: Q X: U4 @1 T4 }: O7 f
#include <asm/mach/arch.h>
* ^# |0 }6 B2 Q$ W" ]' g. X } M#include <mach/da8xx.h>
3 G% o. N, }# g#include <mach/mux.h>
3 C* ]) s( L: m3 p
+ {6 t# ?* E9 O. P7 r#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) ]; E2 o1 ^6 f4 i* M0 S }
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* s6 O3 e* P# F#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ ?& y$ f( _: |! p
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 h0 C/ @6 J: C; g6 M6 m/ C: r! k# r) Y0 \! z3 e
/* assign the tl som board LED-GPIOs*/
: [5 P7 C" Y0 W# v- S& Istatic const short da850_evm_tl_user_led_pins[] = {
4 `: M+ Y' t* u L2 R1 }( [ /* These pins are definition at <mach/mux.h> file */* U4 q' t2 c9 y: R! |3 }
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 w# z4 ^! ]* \
-1
% G- G3 @+ ?8 {8 b3 ]' r};& Y/ Y |0 O* `+ |0 Y! ~
9 q \: i8 R' ~1 C8 c/ bstatic struct gpio_led da850_evm_tl_leds[] = {, s [2 D" M% T* E$ r
{
6 I6 [6 ]* \( m5 T. [5 H .active_low = 0,& `# \+ D3 y& [# b% W6 X( E
.gpio = DA850_USER_LED0,
0 K! Q4 a. f% g( r: L4 j9 b .name = "user_led0",
/ X$ v2 _) s5 `. E .default_trigger = "default-on",& H$ h: r. R% N# O1 u) m( H/ Y" r
},
3 r2 ^2 T9 [* C) v- p {9 v& o, @3 R! {4 Z
.active_low = 0,
0 i0 @- a( d5 i8 L .gpio = DA850_USER_LED1, ]5 H/ L$ V9 z+ G4 N
.name = "user_led1",' C; k5 S8 |/ ?" }3 h! n" U8 c# F
.default_trigger = "default-on",
* E% l/ V' N2 m" l, i) x5 } },3 T& x: }+ w* t* N! S. V
{" n# x; k) a/ r/ t$ E) L: |7 o% g% m
.active_low = 0,
, C. k7 y4 G4 i9 c& O' y .gpio = DA850_USER_LED2,: `7 @/ Q* C- n4 T2 t2 m+ L7 i5 c8 ?8 o
.name = "user_led2",
5 q( t4 H6 e- [ .default_trigger = "default-on",
* w: h% W/ U* Z },6 _2 X8 e$ e+ Z2 E& ]) ]% \5 z* H
{2 b4 e/ \" O$ t" Y7 c5 ]
.active_low = 0,9 P6 T( K. K9 i: A7 d' @0 Y4 [( s
.gpio = DA850_USER_LED3,4 O- {2 @; L2 Z ]. t. y3 N
.name = "user_led3",# O7 D2 c6 F! O& {# [
.default_trigger = "default-on",
y+ F8 s% S1 G4 j; e: i$ t2 \ },& q/ K6 c3 f T/ S
};
( w) `; a9 y- H$ L5 `8 R
4 {- r# s% h( z# ~( {. y- qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ f/ P% a* [8 x8 E& l
.leds = da850_evm_tl_leds,
) g& g* W( {5 u1 }( D# @" ]9 L .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! b! g/ ]! e; M& Z+ U8 O% G% m};4 y! V* H! D( V5 ^& G, q5 r& u
. L: L( U. }9 s) istatic void led_dev_release(struct device *dev)
4 U2 x0 l7 Z2 o1 w4 z% C{
$ S3 K! c$ C9 ?};" T& o; h7 m P* C' L$ @
% V, T0 }- b* H$ q" ^! j8 Q# B
static struct platform_device da850_evm_tl_leds_device = {
! f& j/ W9 K3 S0 A. F o3 g% { .name = "leds-gpio",2 L! @, P5 B; p; U$ \
.id = 1,5 r8 Z7 [9 \, N- s, o8 C5 g* s' v( U
.dev = {0 x( q* `) v( j! V
.platform_data = &da850_evm_tl_leds_pdata,
8 z j5 ^( U. e9 Q .release = led_dev_release,
e& y( R1 d* `' C3 c$ t }
D5 j7 d: Z: d+ C$ z& f- A x/ c};- B; ]# W8 ?0 q
+ M' S8 _* R6 X: Ostatic int __init led_platform_init(void)7 F0 q R: F6 z% v4 i; L5 g3 ?5 r
{
9 H% l# q9 h- I8 } int ret;
7 Z+ I1 l' A- Y8 D5 ~4 A7 h#if 0
# z$ C* c4 E8 b: u8 _5 o ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: y0 E R* z m4 d& C* u if (ret)
1 C' M7 m. v7 r% u4 a* B pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' z, d, N, y' { g4 S7 B
"%d\n", ret);" @# e9 _' n+ r9 I0 }2 o' L" T8 |
#endif
- I" g( c# r$ \; _' C* T ret = platform_device_register(&da850_evm_tl_leds_device);2 e a9 y; {- u: L3 {
if (ret)
. b( I" \: u& m5 H. w$ z pr_warning("Could not register som GPIO expander LEDS");& f6 g, t. C2 @9 ] [" N( |. J
else# T h" R% D7 W' w, T) |
printk(KERN_INFO "LED register sucessful!\n");( p r' ~7 S& E- Y& G
" h& r7 R1 A( f# M2 s v3 M/ k return ret;+ ]* s+ L& Y6 d: U) v( x4 ]
}; Z; ~7 l, }3 E# E8 Z4 T5 ?
7 }- J0 ^) i3 s: Cstatic void __exit led_platform_exit(void)- t( L9 B5 y4 l( V- g9 U4 Q/ p# i
{' b) W( z9 h' j2 F
platform_device_unregister(&da850_evm_tl_leds_device);
, w, M+ Q5 b- `; Y, E4 Y. d9 s- `/ k$ K# C
printk(KERN_INFO "LED unregister!\n");. `4 @0 Y# N' G. |3 E% P
}; ]: ^0 C$ t0 f: ~% e
% K) k; g) o: `+ o) s& ]module_init(led_platform_init);
5 d& Y1 p2 K: O, \, Cmodule_exit(led_platform_exit);" B& ?5 r% P6 J* h
' r8 g4 q% g( N! f7 O
MODULE_DESCRIPTION("Led platform driver");- \/ { ~+ j1 i( @* ^9 f0 u* J/ \
MODULE_AUTHOR("Tronlong");
5 j$ z& V: X9 J- fMODULE_LICENSE("GPL");" v4 r' G& {! D! l, B0 @2 _! J
: \/ }3 t: L# v9 z |
|