|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- r3 D6 [- T" d7 @! K2 D1 X#include <linux/init.h>
2 s1 J: }+ ?4 Z8 A" d! g7 m& @#include <linux/module.h>7 o% ~) u0 i" v' w4 d5 }/ i; G/ ^$ A) z& i
#include <linux/kernel.h># y' k6 q6 _0 G* V/ Y
#include <linux/types.h>
7 G! E' P6 K$ K. c" B# d8 ]#include <linux/gpio.h>
1 @0 s7 m9 `) ^, n+ g#include <linux/leds.h>
X4 V# M! |- }- [. n* g3 |#include <linux/platform_device.h>
. H! I f) {4 U$ N0 r8 D2 l
' X6 j" D/ p4 ^" b' J" ^$ \4 _( A: F/ C#include <asm/mach-types.h>) x5 }; M [5 H" H0 Y
#include <asm/mach/arch.h>
) I5 j) c* c) K+ E/ [# H#include <mach/da8xx.h>, J2 X0 s- U- \7 T
#include <mach/mux.h>- ^% [( d0 t7 h$ I) X6 R1 i1 Q0 {+ z7 b
: U* j" n- f) G: _& C9 c/ `#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' J% ~3 S2 E" d* U
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 E9 A) I* @# b- l1 b9 ~
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 y1 H4 }- @( c9 P& Y+ h4 ?$ z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 J. U. U, M! k* l4 x* M* G. G9 Z: v8 @* [
/* assign the tl som board LED-GPIOs*/
9 Z" n8 J8 F) ^: t$ |( t% zstatic const short da850_evm_tl_user_led_pins[] = {% L# h/ g* V0 p; M3 o7 m
/* These pins are definition at <mach/mux.h> file */6 ^% q, G$ O* ^4 w
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 j( a8 R/ y+ t# S -1
! j( E# q' q9 j8 \/ @7 A};
# R) V9 ^, F" s7 h" K
) t m, p9 }) X4 ^/ e! S* \static struct gpio_led da850_evm_tl_leds[] = {
W% s {0 ]( t8 y' I- B; e( ^ {+ n9 S% h% T% b, {8 v
.active_low = 0,% \ e/ z; G# ^+ W% Z, J2 _/ O
.gpio = DA850_USER_LED0,$ W b4 N9 E* z) u- D
.name = "user_led0",
3 k. a# l6 h P6 _" L6 } .default_trigger = "default-on",1 U% V' W3 y: b; t, v4 |
},, F$ D6 B, I, X4 z1 e4 q: r+ `
{- t$ k0 C, V; b& \6 } G
.active_low = 0,* D+ K0 J4 i9 n
.gpio = DA850_USER_LED1,. X- s% o$ e4 e3 c
.name = "user_led1",
7 K5 P- r6 l5 C8 M! n R .default_trigger = "default-on",
* L$ [7 G1 G; T" w1 p+ i/ J" Q },' I) T% j1 a6 ^/ Y! n! i
{
6 }- t4 Q/ q9 J/ o) }, Y) ]# f .active_low = 0,
4 v5 _1 Q5 J l4 } .gpio = DA850_USER_LED2,$ y3 P3 f: k9 ?! x; c- ^7 X. }
.name = "user_led2",$ u2 a' v5 i0 f5 F! r
.default_trigger = "default-on",; ^: z Q% \( D# j6 k: M
},
. x! Y' h6 p1 c0 U3 X) p {- ^! I& {0 L$ A* D& L# D
.active_low = 0,
$ ]( K: }( i) p J4 S .gpio = DA850_USER_LED3,
: v e& c( ~! K/ W2 S, M7 A2 [5 I# n4 Y .name = "user_led3",
. j/ T, C" Q/ y" |/ n .default_trigger = "default-on",- O' m( V$ O( Y" x- H+ c
},
: I% {3 R: m$ O6 a};% ? k6 q5 x( a! }2 U9 Q
# f; m7 G1 R8 `. v! V6 B/ x
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( p/ L' M( I. n2 b2 P; |5 l
.leds = da850_evm_tl_leds,8 g. c6 Y2 o7 G) @% P. s
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' Q! Y X1 c* S$ d; L};
0 q; J/ Q2 A' \. S: H0 t
3 z3 B6 e( ?5 {6 X% o0 vstatic void led_dev_release(struct device *dev), h! n3 e( a: e* l
{( [2 T! E4 Y( k* d- |5 v! z( L/ q/ x1 j
};
) p+ Q7 y- `) p6 b" x7 Y, \7 t& Y% j9 j3 k# O; D
static struct platform_device da850_evm_tl_leds_device = {4 g( ^6 F4 @) m5 O; P
.name = "leds-gpio",; r. [3 @( k' E& L+ N9 t7 ]
.id = 1,: }$ q* v+ d" J8 K& K9 I
.dev = {
; }4 M" d. ~, W9 ]9 L .platform_data = &da850_evm_tl_leds_pdata,
3 ^1 r; z0 \" _- J6 l% R .release = led_dev_release,
4 j$ {( ^; ? _+ Q; O& T }
; F& ?1 T$ B6 e5 b9 _. t};9 V4 f% G' r8 R3 B' Q; t: `' G
+ N: x' H+ u. U; i; [8 p( K2 l
static int __init led_platform_init(void)
5 [% I% i1 E6 R* {2 p{
. ]1 D) i, U) s2 l* J$ m7 Y int ret;
$ v! n5 u. h1 V3 E/ N#if 0
/ Q% E! [) ]3 i W$ |- n3 t" U- F2 c ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. J8 W/ u. q/ f! A7 s if (ret)
4 g0 X6 S, s& \8 i' H pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ q# b7 Z3 H8 o8 V "%d\n", ret);
/ c) L8 ~" h1 r, L& F8 V#endif
0 p0 Y: N/ J2 p" }/ n! m# e& j, S ret = platform_device_register(&da850_evm_tl_leds_device);" _" X5 i& ]; Y6 a* a2 Y" a
if (ret)$ Z0 k: |5 U# p" @; H
pr_warning("Could not register som GPIO expander LEDS");0 L- M2 t; _2 ? M6 @- d) ~: b3 b
else; l$ F" M5 \4 C0 O/ F
printk(KERN_INFO "LED register sucessful!\n");
0 N r$ e1 B* _- Z! t j g7 f L* Q8 u) M8 D, M; q
return ret;% S7 H, R6 P6 P' T$ t- P
}2 J) s$ }5 F% ?
4 C& \0 i' X) [- ustatic void __exit led_platform_exit(void)
5 \5 O/ g8 O" ^$ J+ T{+ B9 u# m" k) Y5 t7 V
platform_device_unregister(&da850_evm_tl_leds_device);" G) n' S* Z' ?0 i3 ^( ~2 b b" U
; ], V8 E, Q# L) N8 t
printk(KERN_INFO "LED unregister!\n");' v4 Q C( V" @5 d& U
}
8 |/ g- _2 i2 K/ X2 k/ X, Z$ E
! D3 X5 q0 G/ i* mmodule_init(led_platform_init);6 t" T" {3 _1 Z* }7 }& \9 E
module_exit(led_platform_exit);
# m7 H: R/ H; e8 M9 ] Z* P( H# w7 u; d
MODULE_DESCRIPTION("Led platform driver");& J/ l6 p( o& v# Z" b4 `7 C7 R
MODULE_AUTHOR("Tronlong");
^) Q# T- ~& n# JMODULE_LICENSE("GPL");
' G6 p; N8 v$ t( y1 b7 R# v' V* h) m* b, V5 N
|
|