|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 n; H7 o& X5 H, v9 Z0 R
#include <linux/init.h>" r! k; r" U- H' I
#include <linux/module.h>
, P/ ^" e( }4 L7 L7 T#include <linux/kernel.h>
- S3 E6 i4 i3 Z1 J+ p#include <linux/types.h>. B4 J+ E$ W. W* P2 {5 M7 T4 Z. C
#include <linux/gpio.h>
) [3 g4 s' A/ m5 h) H# q% _#include <linux/leds.h>& c6 ?( B9 m" L0 f
#include <linux/platform_device.h>
m* R6 j0 H& r2 j* M
2 @9 s" F3 k) d% }! K. }+ L#include <asm/mach-types.h>
3 L2 v; X& G: R/ n6 c2 a6 _#include <asm/mach/arch.h>9 w9 }" h ?9 G, [1 K3 ~
#include <mach/da8xx.h>2 b6 {4 k( z7 R m' X5 x$ U
#include <mach/mux.h>
# E& D. i6 }: H% s. g! u4 v5 M( N R& f4 O4 I& ~2 Z" [) @) D8 o
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 q# I9 Z5 `/ Z% _9 e#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); E$ U! L! T r
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 T7 ^0 \! R6 L$ h2 E8 s0 b#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ U3 W3 P) U& C/ B" Y- Q& g
1 @# L7 \: W4 l+ b/* assign the tl som board LED-GPIOs*// R$ q! n9 B. o' c
static const short da850_evm_tl_user_led_pins[] = {, r7 q& m: e& g0 d! S8 y- K; s
/* These pins are definition at <mach/mux.h> file */
, A& n- A6 E3 {. p DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' z" f3 o& K; s8 _ -1& A/ w6 }, J! z- h @* Z. t7 H
};) |+ B/ Y" p' j8 \5 P: t' I
: r6 d0 Y) T2 r% o
static struct gpio_led da850_evm_tl_leds[] = {1 x5 z' U7 p) _0 M
{
: F H7 D' V Y& {$ B .active_low = 0,
4 _5 b o" c4 X4 b) U1 c: R .gpio = DA850_USER_LED0,
+ W/ x$ f. j+ u% Y .name = "user_led0",4 s. Q2 |* Z5 D" [3 b' M0 \
.default_trigger = "default-on",
8 z0 ]& a t" O$ y, n+ K },' Q1 M! B' K0 x& V0 b4 o# j% c
{
/ o1 O, H+ U/ x9 V .active_low = 0,# Y" p7 p7 Q4 i. z+ w1 t" O
.gpio = DA850_USER_LED1,0 V' p4 Q9 k5 ]; t. I; C
.name = "user_led1",
! ?* I [5 }. Z( M0 A4 c9 c .default_trigger = "default-on",
. w/ `' j% [/ p: i },6 ]' G0 G* q' X
{
6 I8 j0 R9 H' \9 G' X9 w/ f0 F .active_low = 0,
- V" a l# E: U$ a' i2 A .gpio = DA850_USER_LED2,
! J2 X n1 x8 o2 E- I0 q .name = "user_led2",
$ _% Z/ f5 N0 G9 M: |! O .default_trigger = "default-on",
: u7 U/ s& L- E0 j9 I. V' }' m" m },* f/ i, d& J3 i! x
{. R+ L6 L1 o" y: U) ~: b* D
.active_low = 0,. R. ]8 C1 q! Y+ ~
.gpio = DA850_USER_LED3,
8 {. U; W6 b, s7 |' ], q .name = "user_led3",
. J/ X/ V3 A; F( O2 v% H$ | .default_trigger = "default-on",
& D, C+ W) u2 U },
1 A# x4 L1 w# J};
- v4 O; k3 T- ~$ c
3 e, @; ^! @1 b) c2 U. @- `3 bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' z$ K2 ^8 U: g7 b; n$ U' v& O A6 x .leds = da850_evm_tl_leds,
) s! I+ W4 S- _% H) G! ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 e/ X9 h: T% t$ |
};
2 w; w7 }2 B9 S
8 [' C2 T' ]8 d- x+ kstatic void led_dev_release(struct device *dev)8 [$ j+ p4 B! K% _, r
{
/ G2 W; _" [$ W8 d, W+ Y};0 q( X* T1 `7 \; g X" X% x. p
( b/ V8 A9 Z2 f- A0 bstatic struct platform_device da850_evm_tl_leds_device = {
' r7 k. I$ B5 k7 ^ .name = "leds-gpio",
/ s; G8 c$ j2 G2 L1 q .id = 1,5 i$ A9 T/ b |0 W! T
.dev = {
+ K; D; M6 J$ C! m' n5 S .platform_data = &da850_evm_tl_leds_pdata,/ P T8 t' ^% V* s
.release = led_dev_release,
) E) Y5 y% K7 v4 }1 i7 `$ X6 B: s }' o+ r$ P& @, J4 }# N. M5 d7 x- R
};5 A# p7 u: e' g" [" [' E
- U. g9 L0 V2 p+ q1 E/ h0 r. @static int __init led_platform_init(void)3 @$ L6 _3 Q; m/ f& \$ x- X
{
4 w5 D. v/ P- A S int ret;1 R8 {) K" O) D4 M ?
#if 0
6 y, {. |5 s7 d# H( h* m ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 {/ `* N& ~( d, L( L* k: h
if (ret)
; W% ]& L% K1 p+ E( q* X! t pr_warning("da850_evm_tl_leds_init : User LED mux failed :", E( ^+ O4 W" n- ]+ V" C
"%d\n", ret);4 s% {3 }2 H) i2 y4 ~- Q
#endif
9 q! B1 n8 O( i. f; R ret = platform_device_register(&da850_evm_tl_leds_device);
' f( m1 h+ [& V# ^1 t if (ret)0 c2 _* y1 y; }% I0 i g6 ]
pr_warning("Could not register som GPIO expander LEDS");8 @( e& I: `$ H. v; b2 x* s* J3 u
else
3 w8 n- C7 i( d2 ~ P! `1 H( z: Y printk(KERN_INFO "LED register sucessful!\n");
1 i a6 _" r2 L; T6 K- U# ?: L1 W$ k: ^; S9 U" |
return ret; V# r1 Y9 L! p0 {
}
+ S: H" z9 [( w- A" B2 `/ Z+ Z5 ]: O7 y7 t7 n
static void __exit led_platform_exit(void)) g2 l0 O, n( l u
{( x# j6 o8 n5 c4 F
platform_device_unregister(&da850_evm_tl_leds_device);! F+ `& M% T% y& L) c6 N2 a5 W/ V* L
; P$ E4 z' E3 g& Z9 E& D
printk(KERN_INFO "LED unregister!\n");
6 V) {$ n- z% M) H, W2 Y}- H% m5 ^! @. q" V
/ G) i: A; j Z% j, S
module_init(led_platform_init);! l3 s. M! v. z- j& L; @
module_exit(led_platform_exit);
1 C7 [* \/ h2 x# d) V* c( q% H) A& M' U
MODULE_DESCRIPTION("Led platform driver");
' r& c/ T7 h1 V m8 {% S$ D3 GMODULE_AUTHOR("Tronlong");
o' W1 E0 s6 K% j1 @' {MODULE_LICENSE("GPL");
% I; h. a9 }7 M8 c) b
) m9 q% d: v( T6 y |
|