|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 e; P3 y5 N. w7 K#include <linux/init.h>4 m9 W# N7 a! Y% N( ^1 a# ]
#include <linux/module.h>
5 ?1 W( C( P) A0 S; W2 |#include <linux/kernel.h>- S5 u. V* D, e" R/ \+ M
#include <linux/types.h>
* ]& l3 N$ F3 N+ S#include <linux/gpio.h>% Z4 {+ I" ?( R7 X9 M. L) a
#include <linux/leds.h>1 p, G0 D0 p; Z5 K b% i F
#include <linux/platform_device.h>
% g j) s; Z3 P( p% W
' j+ v1 v9 \0 r+ U* d: B) h6 n- [#include <asm/mach-types.h>
3 P0 [# {% U0 F9 U( f% L0 T#include <asm/mach/arch.h>, [1 `) M8 }/ r4 U2 d/ |
#include <mach/da8xx.h>
7 E& L' O& L4 {* v8 q#include <mach/mux.h>5 e! O8 D9 r( R3 e$ N; @: Q
9 r& a$ }7 P2 T3 |' d* I1 |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, n) n1 r5 d3 i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ p! K2 B, F$ x3 O" ~#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 Q N6 _. T6 [1 W- y0 a8 t#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& w/ \" {$ l) |# v; R
# \7 M! V( h m
/* assign the tl som board LED-GPIOs*/
' d' l6 r# T/ q1 X9 tstatic const short da850_evm_tl_user_led_pins[] = {
+ V5 |2 W' l! r" {) Z) H /* These pins are definition at <mach/mux.h> file */4 A8 W& N9 o3 X
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% H& ~/ ~3 S& a! S. q# ^& ^- q -1+ L4 C3 K. o# w! j
};
! W! m1 t+ U* U' T$ @. Z6 N6 j$ a0 W
static struct gpio_led da850_evm_tl_leds[] = {
5 A, D# c, ?2 ^# u1 L2 `. |# O {
' O0 R+ `# y2 Z( Z: ` .active_low = 0,
3 X/ }; i8 u+ s% u .gpio = DA850_USER_LED0,
. z/ k$ G: q$ ?7 t% X/ |( a .name = "user_led0",
- Q( m9 Z& @3 |; j .default_trigger = "default-on",
) g* B8 Z( w# g4 \ },
5 ^0 D& v+ T' h; C* b6 W! u {
1 y5 Q9 s/ ^6 w) i' g! \ .active_low = 0,! x: m, P+ X4 @5 n1 v( N: \- _# V
.gpio = DA850_USER_LED1,3 m& T1 j1 Z- n3 d) q4 c4 q7 H8 V
.name = "user_led1",+ s3 E( w% A/ m. G5 G0 ]1 w. p
.default_trigger = "default-on",
4 w- p. Y' i: h. Z },: w: R) U2 b6 \
{
+ r$ U/ E% x6 p; U .active_low = 0,: D; |# V* u9 ` Q# }* s5 M( e0 i
.gpio = DA850_USER_LED2,, J1 N; A" @( O% ~; Y) {/ S
.name = "user_led2",0 R# @; f1 Y0 c, B9 X0 q& P
.default_trigger = "default-on",
7 M7 Z6 y7 n5 A2 d0 d },& e& ?4 G8 n; ~$ Y
{
3 i9 ~0 n$ D; S/ U- }$ W .active_low = 0,5 ^5 [* y& x; j& d3 I5 f( `2 Z
.gpio = DA850_USER_LED3,
& O) A T/ z: L% p. M .name = "user_led3"," u! D4 P1 {% {/ n! G% n& Z
.default_trigger = "default-on",
9 m7 e) W. x. p },
/ M4 X1 m1 P" _2 {/ A};
/ ~1 `% m+ h2 b6 |( h1 W/ h8 m4 U% s @# C) ~
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% E4 F+ Z7 ]- y8 n* R
.leds = da850_evm_tl_leds,7 c/ S1 o8 c# k' D, o5 t- U
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 H( D7 `+ M, U6 K) a% D" U};/ X2 w' t& N" E4 ^4 s
" Q5 c' m% d+ y
static void led_dev_release(struct device *dev)
! L9 P" N b+ ?2 c( e{
1 Z2 @' D4 w# w1 G0 K};! ~) S& f0 g' n6 |, Q& M3 S
2 h3 b& d% j5 F0 e4 C
static struct platform_device da850_evm_tl_leds_device = {5 }' ?7 M/ c: E4 N, @
.name = "leds-gpio",
2 P0 O+ ^' Y" k3 n .id = 1,) y; W0 d8 x6 Y7 A5 k/ L
.dev = {2 X9 f0 S' @ K# ^( ~5 Y
.platform_data = &da850_evm_tl_leds_pdata,' k9 W$ w( [4 A" l
.release = led_dev_release,
) }3 u8 s1 \( l4 o* \ W }
1 d6 D. i y$ n; W/ \- a1 x4 A0 z* w};( I, ~5 _0 F9 M) P3 k8 o
" E8 S# r! X3 |, b
static int __init led_platform_init(void)
9 Q: c% e4 l& W2 T# V& R{
7 i6 _, V& y0 O$ h int ret;
( }, @. v6 C9 I#if 0
]$ R: U% s" ^) u7 @2 Z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* |, d- |+ V/ h. _/ k
if (ret)+ ?. R; L: ]+ |0 Z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# p, Q4 y! d8 T) P
"%d\n", ret);! P {, C7 B9 c$ _
#endif
, N9 a" k3 W/ t% a7 S3 B& F ret = platform_device_register(&da850_evm_tl_leds_device);# x3 ?+ E9 S( C7 g
if (ret)* [% A# C- r$ G# z! ~
pr_warning("Could not register som GPIO expander LEDS");
" {! G' k0 [% F else5 b8 C3 G6 O$ _) l
printk(KERN_INFO "LED register sucessful!\n");/ v1 P- `" H6 Z |: D6 G1 I
% w! v4 q. x3 s# u! N$ q' h& P( ` return ret;7 N3 C4 p3 a4 r$ K+ t) E3 Y1 [
}2 r0 b5 ~5 G" o0 n
, z. O$ ?- D! v/ R/ y/ K) ]" pstatic void __exit led_platform_exit(void)3 A, _* @9 L& a3 \/ \
{. [8 h- O% {) ^# w9 O4 J' b# ]. Q& u
platform_device_unregister(&da850_evm_tl_leds_device);8 ~- x1 G! V. f. u( n& i
8 ?( {) j2 j& `6 W( A; O
printk(KERN_INFO "LED unregister!\n");+ J3 J& z7 I% i: A& D
}$ U+ V0 a$ R |
( A& J8 v* V- ]- J. L
module_init(led_platform_init);3 V( m' X% Z# ~! O- ]
module_exit(led_platform_exit);
- d. V* r: o* ~9 k& P9 ?7 Q
; z" s) W$ ?- i6 pMODULE_DESCRIPTION("Led platform driver");
: z7 z; ?& s5 F! PMODULE_AUTHOR("Tronlong");
$ G8 B8 ^8 T4 }' nMODULE_LICENSE("GPL");, [! I: R$ N" t1 p" v& w# Q
, N! P. n, q4 ~
|
|