|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 d, R* `0 L7 k9 y3 U1 t#include <linux/init.h>. L, W% e7 V/ C1 l7 E' b" }
#include <linux/module.h>5 `. j$ J: w5 w9 I/ w3 [& W
#include <linux/kernel.h>
% d# M! v* Z3 }/ ~: ~* m5 |; m#include <linux/types.h>$ [! A# k" N! y6 r, X% O, i; U
#include <linux/gpio.h>3 Y" k9 A/ t9 k+ v
#include <linux/leds.h>
7 i/ F# i" \6 |# o; T. b6 O( l#include <linux/platform_device.h>1 D K2 j( q9 ^3 k) y) u
3 c' N. F9 L' K3 F$ p
#include <asm/mach-types.h>
2 U5 h* _ j, G5 E6 ?6 ]#include <asm/mach/arch.h>0 f7 r) O7 B8 ^! b7 C3 @
#include <mach/da8xx.h>0 w& ~' J9 ]4 D% |1 S$ v
#include <mach/mux.h>
# l) F5 G0 Y: l7 I: g+ v( R5 D! ]) I1 D# q X
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 p2 n) Q1 k7 g& s
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ _; a5 V {$ r0 M4 S4 S
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% Q5 M" [6 ^; O#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, _: ~' Y# z0 C( ~3 p3 g' W/ c9 o
/* assign the tl som board LED-GPIOs*/. G( e! x/ ~7 [2 B5 ]
static const short da850_evm_tl_user_led_pins[] = {
% V4 m# C( B9 [( p" h' } /* These pins are definition at <mach/mux.h> file */3 [6 `3 j0 l0 x8 P7 C1 r
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, _0 d9 j7 k! F" D P; n/ h
-1
0 x) {& U* ^* C/ d5 G9 q. \; p$ [};
, H& S0 Z% o/ L- X* [! `2 ~
) a5 t0 ^2 t; i$ x9 U1 \" Vstatic struct gpio_led da850_evm_tl_leds[] = {7 Q% x/ m) l+ V" Q+ ^
{
0 G+ J3 Y$ m. c8 y .active_low = 0,4 n; V# S r3 p
.gpio = DA850_USER_LED0,
; Z; _0 N/ u9 y7 \2 H .name = "user_led0",9 ]9 [/ j. H6 o
.default_trigger = "default-on",8 B# \' T9 e* o$ T+ o$ h& j6 N
},
0 e- O$ o, N4 }! i* t/ R, Z% E {5 S0 v# X' c2 @0 w8 ~3 p
.active_low = 0,; w9 m/ j3 C# Y" \" o; [# L/ A
.gpio = DA850_USER_LED1," d9 D' B. O" b; ~+ ~1 W
.name = "user_led1",
1 _- b+ b. d) Z9 F/ a .default_trigger = "default-on",, ~2 v6 m7 E+ D
},
: I, _4 R P/ R, _* C {
3 {1 `0 f! J2 R% d& w% u _ .active_low = 0,; M- u4 Z! K0 R t9 n6 [
.gpio = DA850_USER_LED2,
5 T9 }) E n8 G' C .name = "user_led2",2 T4 Q8 V [' |( N9 S
.default_trigger = "default-on",
% x; g" n4 I% ?) z/ N% F },+ C& N* a9 I4 |/ v. A
{
9 s6 r' r# ]1 M R' D .active_low = 0,3 g6 J* B' `6 n8 J$ \) X2 E) D
.gpio = DA850_USER_LED3,! k C3 v( ]/ b+ f+ [
.name = "user_led3",3 H6 B# J% L8 `1 J
.default_trigger = "default-on",
$ ?0 K! d2 |+ Y( b* \ },8 ?% B( ~* @/ B# k; o H& B
};
- N" Z9 M" Y( ?( l8 y% Q6 H Z6 q7 v3 |) i* {) i1 c
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 K' Y5 c) i- C% ^ .leds = da850_evm_tl_leds,
# ]7 n) k' N0 x .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 u E; I2 D- x) N};
9 Y& ~& A7 X- j1 N1 Y: {0 o0 {
" ?8 e3 p9 v- Q% W; V( Bstatic void led_dev_release(struct device *dev)0 q4 ~/ s7 U' w* O! }+ ]
{
6 p9 X8 T3 W8 J};
! N. h _( D, c- @5 V6 `2 @4 t
% j$ P. R, I5 k# l6 i/ xstatic struct platform_device da850_evm_tl_leds_device = {
0 R+ S) e% j& ^' w. N' y* _5 _ .name = "leds-gpio",/ [7 Z5 W2 ]! s+ E# G& S) I
.id = 1,
, [* o' }- J& Z* g' Y% a) C& k .dev = {" S- m: d/ f7 ^0 a& E: o9 E
.platform_data = &da850_evm_tl_leds_pdata,+ ~$ o! o7 q$ ^7 i# _* ^/ T3 |- V! N
.release = led_dev_release,
! u( V6 ~9 n7 X3 n4 U7 o! q& U }
9 w9 q3 H' [ o};5 b: r( s9 M; b U+ V
: a( t3 m' @% |! C6 [static int __init led_platform_init(void)
& [# q% ?$ \, Y. ~{4 y. Q8 J0 c1 E6 r# k0 s0 f
int ret;
* x: G+ {" ?/ t. I8 }$ G#if 0$ F- a" \: h' \: S9 V7 B# W& r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 J) f2 E( R; t% k+ ]6 y if (ret)+ L$ n0 z( @# z; V& o
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" ?) ^5 M# F, ~ "%d\n", ret);
% ]$ }2 x7 ^0 G! j% ^, f#endif6 ]; z) E* u% _
ret = platform_device_register(&da850_evm_tl_leds_device);
7 Y. ~ L1 P, S" c: | if (ret)# Y. |8 u1 p: T6 J* T, U7 Z
pr_warning("Could not register som GPIO expander LEDS");. v: s4 v( Q2 L6 s' {4 q
else. l4 ]& @, ?( c0 R
printk(KERN_INFO "LED register sucessful!\n");
: j; p: c8 U9 s$ S& U* y
! I& r3 y4 f Q" L, e return ret;
- Z) R$ p7 ?/ f# \( x9 e6 c/ V! s}0 `3 X' o* F/ X _. b: v; \: _
$ C. I C. D1 {. S2 i3 j# Ystatic void __exit led_platform_exit(void)
0 ] W ^4 e3 {# t6 A) c{
+ _! n% b: I9 o0 t, F/ S0 f' b platform_device_unregister(&da850_evm_tl_leds_device);- K9 @( d5 V# J* U! B7 ^) y
; J% H$ P, }2 t printk(KERN_INFO "LED unregister!\n");6 c' V' x& O# r
}
, r% I+ W. _$ I; ]$ Z. x2 ^7 g( B/ d% Z. s% l7 `
module_init(led_platform_init); }) ?; B" c, P4 J
module_exit(led_platform_exit);
# G/ Y0 U8 g, O; r9 [# ]/ S
9 L9 X5 Q5 r- d0 sMODULE_DESCRIPTION("Led platform driver");0 P3 M/ y+ @9 D" Y9 X/ I
MODULE_AUTHOR("Tronlong");
4 c$ _, f, Q5 x5 B. K C3 lMODULE_LICENSE("GPL");
* @$ D" J+ J* S3 r* b( j2 a0 W- O* f1 { w% Y% n& u) T
|
|