|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: g& ~0 D f/ o2 `) b: ]& k/ _3 [% P
#include <linux/init.h>
% v- P# s; V9 c, z/ }4 Y1 `8 g# |2 ]: _#include <linux/module.h>2 e0 K6 q$ h4 Z
#include <linux/kernel.h>
" r. _; u1 _# M! F4 Y#include <linux/types.h>% b* D$ S6 r& N8 F, m, Y
#include <linux/gpio.h>
; p. j( F* P' Z1 Z' _6 p1 b2 k#include <linux/leds.h>
2 I6 x0 X: [6 j. q& L: T#include <linux/platform_device.h>$ \# z/ T5 i! h- p
% X0 f" ~, Q x, O$ M$ n0 W/ b5 g& J5 C
#include <asm/mach-types.h>
5 l$ q, J l7 c& Z$ p* N$ n+ f$ E#include <asm/mach/arch.h>+ Z& s, ~1 ^, C2 k2 u5 C
#include <mach/da8xx.h>0 f" B7 [' v8 U# o+ L" H3 G: B9 S
#include <mach/mux.h>
- e) | w; i+ J& S: ?1 q
$ W1 _, m. F! l f" V7 s& r#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 O0 M1 I M' r3 [* m! R5 Y2 G
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 @( x1 W- \ e9 e: i2 d! K0 {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ y! {9 n8 e% d. Z, U7 [
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- a$ S) Y8 a: y7 f* _* }, k
# R f! I& k2 r+ p7 `
/* assign the tl som board LED-GPIOs*/) E) T- y: u4 J/ q5 i: I7 a
static const short da850_evm_tl_user_led_pins[] = {& o, N+ Z& m! @' A
/* These pins are definition at <mach/mux.h> file */
8 |& F% X7 f( I/ r8 I DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,& N2 S8 n1 Y; Z+ L$ c! U
-1
( c1 v) k8 g1 I& |};
B7 r9 c4 L7 z) X/ @5 u0 c3 @/ A! Y7 ^6 j
static struct gpio_led da850_evm_tl_leds[] = {
) F- O* O0 T/ o ?6 z, S {
4 _; ]3 r9 Z- _ d .active_low = 0,
( D! k( D! n6 n& t .gpio = DA850_USER_LED0,) Q0 y h1 u, i0 s
.name = "user_led0",
5 Q9 b1 i( j2 C' a: q$ C: j .default_trigger = "default-on",
( U- \+ R& {; J9 \" C },
, d4 o7 i r3 N {! F% l: V7 }9 A+ d" M! A! J
.active_low = 0,
}; w% O1 T" P* s' L6 E: \ .gpio = DA850_USER_LED1,6 v" ^. P) U1 n# ]/ T: m
.name = "user_led1",
' S7 x1 a3 O" T+ m4 n .default_trigger = "default-on",
( j# d) }7 Y2 X* S9 I/ Q },/ }" J! l, R( G) r4 v( v9 l( G! w
{
. v" ^! p) M6 E: v, r' b8 q .active_low = 0,
: y) D; f5 m$ }5 F o .gpio = DA850_USER_LED2, r3 U2 x8 a& z% N4 p; m. R5 T; \
.name = "user_led2",$ o+ H: n4 ^( {, g) U: T: L
.default_trigger = "default-on",
# S6 u# G2 Y1 p' @! w) D1 ]& b2 P },
+ B# I# G/ u& b3 ~3 m& s. i! { {
i- ^1 ?- s; k! J, N6 { .active_low = 0,
4 Z v u8 f" w z# M .gpio = DA850_USER_LED3,9 }& _8 j4 w. a; L- b* H
.name = "user_led3",
6 h& M* d% V" l .default_trigger = "default-on",
# z: ?' K: V% T4 T0 W. L8 V },8 M3 T1 [$ w# b) J( H* e
};
: m( e: n2 v" n/ h3 F; _" p3 M& g6 s; q
+ O/ D* f- X5 D! m* y* Estatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* D: |3 t$ B, Z+ j: S .leds = da850_evm_tl_leds,
% B0 _5 ~0 \% i1 e. h; F% {- M) Q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ W3 `4 r* i6 p! p
};! }& ^4 Y. ]" z7 U
+ p+ c% b k$ ^5 \0 O8 P+ n7 m% _
static void led_dev_release(struct device *dev)9 a; I! d, d5 p6 ]' i4 P
{
! [) p. ~) C3 ~' H0 H0 h ]& m" N};
/ Z% ^, P6 f8 v7 A0 j6 d2 ]% X4 Y7 I1 b" z* w# w1 A
static struct platform_device da850_evm_tl_leds_device = {
" @' c7 D# h/ I .name = "leds-gpio",
( F& Q: l8 {# G' q. \$ H .id = 1,' w# A4 u( T7 w9 F
.dev = {3 b. K5 R( g4 H% k
.platform_data = &da850_evm_tl_leds_pdata,
7 ]2 y9 n) q+ G5 |( r .release = led_dev_release,
% U/ E8 ^, x8 X7 M5 z2 |+ N }% Q0 h$ U" f* `' @2 g2 S+ ?) C
}; H3 @* B- q* x
# v. x! [, ~* a; l# `* l
static int __init led_platform_init(void)- p. Z/ X* W' a
{+ {, {+ b+ f; n4 w
int ret;
% F$ z9 h7 U% O+ N' X% c/ ~#if 0
7 V2 D6 G, H0 U1 U4 v- ]0 y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ g% A+ y, j8 B+ P if (ret)
5 }$ C( b; x( _* F pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 V: n: J. K9 q& P0 y$ ]% Y) p
"%d\n", ret);/ v" O# p( `0 z; Z
#endif
/ G1 D9 C! G, n% u. j' ` ret = platform_device_register(&da850_evm_tl_leds_device);
' ~' t( W. n$ |% q if (ret)
; m; p0 X7 v% h pr_warning("Could not register som GPIO expander LEDS");/ w. E4 f% W O6 b" P# |
else4 U2 V% `+ t+ b6 W+ U0 y* i/ O4 X
printk(KERN_INFO "LED register sucessful!\n");
; P% M* s: D/ r1 `. Y+ G! Z4 h: S5 O# Q% y
return ret;. J+ {) v2 J# T6 D
}& T2 r! C1 O1 N8 a3 F1 e" G
# X ^3 z* G: C! Y- q; Fstatic void __exit led_platform_exit(void), t f& o! ]% L+ ~" b( f
{
$ p, G; W" J5 S: n( a platform_device_unregister(&da850_evm_tl_leds_device);
4 l9 b8 T) \* p
- {5 @0 E6 k' `! w9 F, H printk(KERN_INFO "LED unregister!\n");
3 b- F( O% o# _1 K% |! W( G}" [# e% |; R( M" `
( A: o# w5 Q' p' i, e+ M
module_init(led_platform_init);
" W0 c8 _; d! I! {: }$ h/ O9 D& x2 Jmodule_exit(led_platform_exit);
8 |; p; ^* O( e. ~! C: a( t, ]7 F) r. J4 w" L2 R
MODULE_DESCRIPTION("Led platform driver");
3 h: t& {6 H1 w- P1 v" D/ @7 JMODULE_AUTHOR("Tronlong");
9 x# e" c6 D& ?$ j XMODULE_LICENSE("GPL");
/ d {) u) ^5 K. ^9 a1 Z4 T" Y4 o: a. w; O K) B- f
|
|