|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; i, ~1 Z6 m; f, X5 F+ y
#include <linux/init.h>
1 p) w$ c: E, q& F#include <linux/module.h>5 _0 r) b8 \1 N0 z; j0 c
#include <linux/kernel.h>
) ?2 y! g; \2 H2 l#include <linux/types.h>$ t; K% F S: v, W) {. q* B
#include <linux/gpio.h>" B8 L- Q1 n, o
#include <linux/leds.h>
1 x) @! f# t$ B2 O& y#include <linux/platform_device.h>% H/ ]# E' k/ w! p. x J& t
: `9 m6 J# @2 L* K) H" e* }5 O#include <asm/mach-types.h>
, q& S% I" v k- M* ~#include <asm/mach/arch.h>
, f. \. z% w' {! \' ~! Y# v: O#include <mach/da8xx.h>2 ^6 d( X; f( J# Z G
#include <mach/mux.h>
( Z4 I# k5 ]& L% q) T# ~
- j; q; b2 h7 E2 O8 s, v#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' R0 B* m N4 f- b0 c) @ {#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 ^ S) s( H) Y' [# y. \* z
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 z. v2 @9 ]; ?
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! z. |* g2 ]) a: ?
% r) P5 l$ \2 [4 L' @/* assign the tl som board LED-GPIOs*/
2 C0 Q$ v1 f6 T! q0 q/ B& hstatic const short da850_evm_tl_user_led_pins[] = {) e* z5 o: R% z6 p( f, D
/* These pins are definition at <mach/mux.h> file */
- C5 v! ^! ]+ f: } DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 I. \7 x- B6 w$ b l# h: [ -1
* W2 u# C( u8 {8 ~ |* h};# c1 G, L T; x9 \0 j( r
, y' K: t1 _$ s9 r3 Estatic struct gpio_led da850_evm_tl_leds[] = {
- B9 f1 q$ T) }. \ {
/ R9 S) c. x1 j9 y( u .active_low = 0,
; Q) q. X3 T7 r! R% A* O .gpio = DA850_USER_LED0,
$ y; }' {7 F7 {( s' l .name = "user_led0",
) t' l' {% _# J2 R. R3 ? q; T .default_trigger = "default-on",
# D% b$ D1 t8 x$ m1 { },
* X X& p: j9 R' Z {$ h( Q' e( A w3 B- k2 k& |
.active_low = 0,
4 T8 m( r& v( R8 i .gpio = DA850_USER_LED1,
9 m6 [9 ~ J5 U% T) ^ .name = "user_led1", R& a' A5 m' \0 |, ?; z
.default_trigger = "default-on",
3 c8 Q/ y# |8 g% U },
1 e5 m5 M) V5 @6 m7 R( z {
7 ]- O* T3 g. d" y) t! | .active_low = 0,- k9 s9 l% ~5 t! X
.gpio = DA850_USER_LED2,0 @" D$ f6 e- P" _9 M( N
.name = "user_led2",8 k: Q; m) B$ [ Z; g& \, P
.default_trigger = "default-on",
+ n+ \/ h5 D6 L; Z* ~! O" O8 @2 ? },
, Z( o8 l2 T1 B8 L' U& W& P {
+ B, N7 M. ^* Q9 C9 V .active_low = 0,# k2 } o' D3 N5 }6 k4 D- W; [
.gpio = DA850_USER_LED3,' M6 V/ r% H) r5 w) {3 u& @5 |& G- P
.name = "user_led3",
$ t- A0 H7 [4 \& ^ .default_trigger = "default-on",
! W! m5 Y$ \; T },
* V8 Q- y( p' ]+ J};( q- W! M' J2 b7 H( b! g) @
/ D4 ]5 a( k& ^- q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ w/ u6 g# B8 a) Q2 I
.leds = da850_evm_tl_leds,
( `- t* A4 y1 \0 B) R- Z T .num_leds = ARRAY_SIZE(da850_evm_tl_leds),* ?& E6 i/ {7 u# A8 U
};) p6 e, l" T: @
( C5 k6 p/ k% M! R" e
static void led_dev_release(struct device *dev)
; S- O8 A4 g" z; G0 h{
; x0 G$ n6 G& k. @/ ]+ ^0 e};! K V/ b6 c9 E" _9 m
9 X$ k+ `: x3 |
static struct platform_device da850_evm_tl_leds_device = {/ H" b% P0 {) S1 Q! _9 Z- z; o; [
.name = "leds-gpio",: D( F$ l5 h8 h# j7 r8 ]+ w9 w6 G
.id = 1,
: P }! R5 m. V .dev = {. q3 k! J$ g2 G8 @! L7 p
.platform_data = &da850_evm_tl_leds_pdata,' @' Q, x9 ?6 R# Z8 j/ _4 A
.release = led_dev_release,+ M% u. z6 O1 ?; e) d4 B
}
* v2 S8 T6 W. j};
u3 m) S; W' N) S. b
4 Q2 m0 \! F; G8 r/ P+ Bstatic int __init led_platform_init(void)
# O, T* Q6 o+ i8 J: V% B- E9 T8 D{
* e0 n0 a# q" S6 A$ L int ret;
7 s4 G& k* d+ g1 }* U ^1 T& Z#if 08 ~% n8 m0 A, P4 r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# L1 c p! U/ @! J6 {2 u
if (ret)8 g- Z9 ^% x- V% A t
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 B5 u7 D0 ?6 `: n+ L
"%d\n", ret);! ?9 p" {8 l; `+ R( t7 g
#endif
# Q& k% E" }* ?# m& i# B) y ret = platform_device_register(&da850_evm_tl_leds_device);" r. x4 n, n/ X- P7 e: o
if (ret). _6 D# M$ n" |3 o. U u
pr_warning("Could not register som GPIO expander LEDS");; Q5 t/ d, z$ J1 c6 _4 Q
else' O- Z! ~: L) k# c
printk(KERN_INFO "LED register sucessful!\n");
( F ?2 K6 T: D- V! b
b; H ?* m! K3 \. k6 Y return ret;( {: B1 c2 C( I( ]9 [
}
& t* q; F! |' \3 r' M
* e" q1 m2 R, Z; e7 k9 Kstatic void __exit led_platform_exit(void). N/ e, J3 G, u9 l9 d5 `' |
{* g, J1 [4 M3 V' k/ v3 G
platform_device_unregister(&da850_evm_tl_leds_device);
& k1 H! ?6 p2 I: H' h9 D5 O3 Z) l5 `8 C
printk(KERN_INFO "LED unregister!\n");' G1 \! _0 p1 g4 w
}
8 v* a( V0 `% O" Y' F+ }3 `/ J
1 @5 m5 N: ]( D3 `4 J5 Vmodule_init(led_platform_init);
! e# k- E( t; X" l5 D* X5 lmodule_exit(led_platform_exit);) O0 ~0 \; X3 }% c! z% Z8 l
3 R; r* p; @) i" N
MODULE_DESCRIPTION("Led platform driver");) v! u: u1 `9 ?) }3 P2 j( _. X: v o
MODULE_AUTHOR("Tronlong");
; o% j; b: z3 \# C* y# DMODULE_LICENSE("GPL");
" ]: S5 H# O, k5 P5 v* u+ A8 D, J# t8 O5 v$ a
|
|