|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( ~: g" ^; G& D4 U7 D1 {+ r' q#include <linux/init.h>! i$ i+ B- c% I- z% J4 E0 y
#include <linux/module.h>' e2 P+ E8 ~: R: b& W" y$ E+ B
#include <linux/kernel.h>
7 V, u1 E4 v0 C" [+ X# x#include <linux/types.h>8 R4 v& U! R6 K' `3 O% l
#include <linux/gpio.h>/ v; A( f) ]2 S" Q/ Y2 A' n1 a0 L
#include <linux/leds.h>
2 a1 i& ?$ U1 V4 I1 D#include <linux/platform_device.h>' Y- O7 m4 k( R
) I: M! i- j8 H8 V#include <asm/mach-types.h>
! q. j9 Y% h2 e9 u" M- e#include <asm/mach/arch.h>
5 f( t6 r" F* \#include <mach/da8xx.h>. x- O2 V- x/ {2 Z6 O- C
#include <mach/mux.h>$ r+ l% C0 o/ O3 q6 t! G- K# |: d# F. n
/ \! g" Q; B7 N; j ~! e+ S- P# ?
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! }+ W$ B: i* ?0 W w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). W- ?* p$ ?8 M
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& E d2 w, K* I$ D4 A: [1 D2 `#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- o3 H! `/ z0 B, q5 y$ R, T" p3 K
; V3 j% A- K- S% b* b/* assign the tl som board LED-GPIOs*/$ m( @9 i: `: A: V; v" C2 L$ s
static const short da850_evm_tl_user_led_pins[] = {# s( R1 e Y4 K4 s2 f/ z
/* These pins are definition at <mach/mux.h> file */3 U" x9 C$ r* \5 F5 u
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ V+ c6 l: ]8 u# Z
-1
9 x( p9 s1 [, a/ b; N};
2 F: E* ^& g' N4 j' Y% w7 y
! J* Y; T3 K1 V. R$ w& v" ]static struct gpio_led da850_evm_tl_leds[] = {* Z' A; n# R% {: V8 m2 x, r
{
. w0 \5 S6 V. z, G4 s+ T, _7 j .active_low = 0,9 t9 e" o6 e8 ]* v
.gpio = DA850_USER_LED0, t. ~9 ?# }0 ], j0 g4 I4 f
.name = "user_led0",
& p, N: m9 h7 @1 ~* m- x( [" k .default_trigger = "default-on",+ {: v) s7 o& n) i
},
7 J: L7 @% V% d2 Z& D {
7 r! R* {3 J& ~. ? .active_low = 0,
- K0 U8 I P+ S2 Y8 D1 Q .gpio = DA850_USER_LED1,
" x: ?6 i- v- K2 R* ? .name = "user_led1",& X; Y: D, F" i9 l
.default_trigger = "default-on",7 l4 I( b; K m1 n: B
},
) ` {" q3 P' V' E" T8 C: C2 G/ a {
. D: p4 S$ u% ` .active_low = 0,2 M- m& X* H$ E$ f* h4 x% W& w
.gpio = DA850_USER_LED2,
$ {* I' Y0 E$ l- U. w3 M- D% ` .name = "user_led2",
% C, p' ]& ~4 {& C) A! c( T* L- | .default_trigger = "default-on",
; i& V& M* P) m( Y$ O) F },( [6 G* k6 _, S
{+ U7 R" w' s2 p8 H& G# ?* g7 D* y
.active_low = 0,
8 [( z' u: @7 Y* U2 { |% S .gpio = DA850_USER_LED3,
, j- N' J3 B9 G7 \! y& z6 W9 W1 Z .name = "user_led3",1 s. d5 y4 K5 ]; w% k
.default_trigger = "default-on",
% {' H; J$ q& s2 Y- N: _# o ` },: {8 d l6 q) d! I# I! l( f
};* x* z/ h9 O) w
6 W2 b( ^) c- U, f+ P, `static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* p' ^ \1 B: h! a
.leds = da850_evm_tl_leds,
- h! V5 A+ x9 ^ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; c& j3 a2 ?+ a2 n. `# ]
};
' M. y# O! K1 L& }9 N: L' a0 {+ | A0 |- E" V2 R( l/ k o* t. u. w
static void led_dev_release(struct device *dev)! o3 J" s4 O; L! q* V) c6 e; ]/ B
{7 K. r" k- v( d: c7 A& D
};( X" c4 A) G1 O3 ]
7 f4 }2 B" p7 D4 @
static struct platform_device da850_evm_tl_leds_device = {
& b( h$ q% m/ y4 o: x; X p .name = "leds-gpio",8 C, @. h! Y( ~9 h y. H# x G% q
.id = 1,
( o5 u( r0 z6 J4 l4 _( | }, G F .dev = {: P3 w# v7 v* B( p* X
.platform_data = &da850_evm_tl_leds_pdata,
2 f7 y m& k( j! H" \ .release = led_dev_release,
1 S& X+ i! s. K! \1 A) i }
& F% X3 X9 ~- h};8 V7 w+ {+ c, D
' ~% V2 t. t2 x6 L7 A( u( g T) Istatic int __init led_platform_init(void)7 C7 {% `4 y: i0 C8 k
{) s: @0 z2 H% x7 a# O
int ret;
+ b- Z3 _* @, D" h; g. y% f#if 03 g1 t9 D* P$ j6 L1 ^6 ~
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- E+ E" ]) o, v }8 P( P+ R+ i if (ret)
/ `! H4 ?7 ~; J P pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 M* F& x& J- Z+ b
"%d\n", ret); L4 O' a0 w8 d" o9 T. h U# N
#endif' [0 u0 b% Q+ a" S' n# ^
ret = platform_device_register(&da850_evm_tl_leds_device);7 [: `9 G) }" e
if (ret)$ r- s* D y2 O6 O8 @! B
pr_warning("Could not register som GPIO expander LEDS");
: i0 t, @2 K" m1 B9 U5 w6 q$ R8 K else+ p z* p/ O, Z2 ?+ G4 |4 t9 {
printk(KERN_INFO "LED register sucessful!\n");
3 e2 N$ r8 Q9 Q# [( P
, Z9 y! a4 \+ B+ v, T9 Z return ret;
! R6 m+ S* D5 }3 Z}
/ b# S3 ~6 |' [. F8 {- K, b; q
1 r6 x+ Q: s2 z* N' K. y+ ^static void __exit led_platform_exit(void)
% Q# o* S4 S! H3 f, r{
; R- }1 \/ X( E platform_device_unregister(&da850_evm_tl_leds_device);! ~1 o( T( \0 }( L8 D; F
& W( |/ D* a$ ?' a
printk(KERN_INFO "LED unregister!\n");9 q2 ?/ y, `/ x2 a$ t6 p
}
/ d$ j5 F* U" x5 G+ `; j. g
; j$ u; S% t* f# R. F8 h$ Mmodule_init(led_platform_init);
- q: C; i' z5 l {module_exit(led_platform_exit);7 \8 h/ t8 G# T2 Z1 D! [
. w( u- b1 x, I
MODULE_DESCRIPTION("Led platform driver");
- `8 \( S6 l# b/ ` V& x5 I' R, F% HMODULE_AUTHOR("Tronlong");. ]- \8 T( ?0 J6 f
MODULE_LICENSE("GPL");
* a! }2 ]# o+ o' V7 S6 a: u+ u$ a- f
|
|