|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 P0 H, `4 ?9 @$ e#include <linux/init.h>9 Z, B N0 H: n0 ~7 Q) r# k
#include <linux/module.h>* v1 g3 p$ e' q0 u F) `. r
#include <linux/kernel.h>
% l; V2 u1 o# d) B8 d( P#include <linux/types.h>
6 w/ @% L8 H5 C8 ~$ Y, r; }#include <linux/gpio.h>6 l4 Y& X- F$ ? \: J
#include <linux/leds.h>
+ K/ U2 a4 C E; u9 Y#include <linux/platform_device.h>0 d0 I% S1 K( Y: Z0 E/ o5 h
5 h0 r5 k8 r8 ?9 `. d& Y
#include <asm/mach-types.h>
+ v! d. V" J( y; Q) K" a; ~; Z* B#include <asm/mach/arch.h>7 x/ N( }! W( x0 d" q
#include <mach/da8xx.h>
. ^8 W6 _3 i T! i* |) ~; l6 s#include <mach/mux.h>" E; Z& `6 J+ L j
" Y) Y/ W5 C5 c& P8 f$ V$ y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ a! G4 i3 H$ z1 K! U
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! h5 I0 i' F$ l8 w
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; e" u( c2 Q6 `+ w1 Q; ?7 H#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# {+ J$ u. Z+ ]) c, f
! @+ }. H" U2 E% J& E/ z" w/* assign the tl som board LED-GPIOs*/9 ~' b* p, Q* I5 H- i9 ^$ Q5 K# e
static const short da850_evm_tl_user_led_pins[] = {
0 J1 ]( N( u# c3 Y0 K0 Q0 @ /* These pins are definition at <mach/mux.h> file */( |, d8 E+ a) R6 M$ Y4 k
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) I; ?3 V: Y o4 Z -1
6 X+ _% r6 S/ {};
% D5 c4 K- k4 t9 X+ d
/ Y" |9 @& Z1 B8 f5 ]1 ^static struct gpio_led da850_evm_tl_leds[] = {
5 v% l7 M9 G# s4 { {
8 s- h, Z% M: j6 Y .active_low = 0,4 H5 t- P7 P* X4 r8 N" |3 N9 A: o
.gpio = DA850_USER_LED0,
2 [# ~ t( i H6 W9 a .name = "user_led0",, w5 p# b4 v% B$ S. k9 `# P
.default_trigger = "default-on",6 F, B* ^& i" @) }2 ~- u. K
},' M0 c U- j$ S
{" U3 w, ?7 o2 {+ Y
.active_low = 0,
- J& [2 |$ L1 ^# T3 k, f0 b .gpio = DA850_USER_LED1,
/ @ u' T$ J8 j" e9 o @* @% F/ U .name = "user_led1",
- R! Q& z4 N' t .default_trigger = "default-on",9 q7 x- T4 t3 ?2 ^
},
) y$ }( g" P) |9 |5 z% A9 Y {- u" p# g+ v4 y) h/ V% M
.active_low = 0,6 U3 p( Q. V2 |5 O7 {
.gpio = DA850_USER_LED2,
- M5 @$ h4 N( Y" j" |$ K0 ^ .name = "user_led2",
1 K) j+ \0 w3 A) D4 M" r .default_trigger = "default-on",- ?' c: {# M8 j* E0 d- m! u, T
},
8 W# V2 |" J z {& r$ G! e, w# A
.active_low = 0,
8 _ u3 t8 A1 ]* t6 c& Q: B5 o .gpio = DA850_USER_LED3,
' w" n4 |) _1 I5 | .name = "user_led3",
. B6 [- n" u$ C .default_trigger = "default-on",3 ]3 t8 |% }1 B8 |) _$ Y- k% u' I4 ]
},
/ I+ D) }3 [0 y9 c; ]" s};$ X. j! L1 [( b- q
7 x4 L6 z0 G2 _& q) r7 Y( ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
a6 F% W8 u1 G& z .leds = da850_evm_tl_leds,
* l5 k2 \$ `$ u .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 w" K( A4 n) C* I};* w1 {% |2 D z, T9 @; M
8 {+ Y. J+ |! I# Pstatic void led_dev_release(struct device *dev)' j% g! l% K: o' q+ m4 `
{
. D i0 _$ ^, d7 R" E) \};
3 F2 }7 w" ]) N6 L, ]- b! ]: p. v. @1 q) L/ O4 q1 F S
static struct platform_device da850_evm_tl_leds_device = {
1 |* {' O- ^# Q5 x" X; D8 F .name = "leds-gpio",% `9 n5 U9 D! e
.id = 1,9 @8 W! Y4 o9 L+ b
.dev = {4 @3 ^. F' A( H# j9 N
.platform_data = &da850_evm_tl_leds_pdata,
4 U* X: }% q9 Z3 A .release = led_dev_release,; ^; `. u! y' E/ u5 W' Y
}5 P2 i3 a. W( U# p
};
: Z" w! x- \" o. F% N1 p8 t
6 d4 U3 q( m# O( ^& r# B. B) cstatic int __init led_platform_init(void)
7 R# q, L2 r+ N J' e, l/ I{
; C( n* Z# V, J' M2 P5 Q- T int ret;$ O, i% w8 a7 g- U7 t: j# w
#if 0* L& K" k/ R: G$ B5 ~
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) F8 k/ {* o; p9 I$ K8 l
if (ret)
6 Z2 m: a) O, V e+ e) [ pr_warning("da850_evm_tl_leds_init : User LED mux failed :", T, h1 u7 Q0 y0 T0 X
"%d\n", ret);
( t4 s* W$ C7 L* p; Y" r$ E" C#endif8 }2 [, s, o6 `( ~
ret = platform_device_register(&da850_evm_tl_leds_device);1 O5 I& h( {/ @( K
if (ret)
8 I+ t& \" v) M) q pr_warning("Could not register som GPIO expander LEDS");
8 d4 y' P& u6 L( o% [ else
5 D5 D D: c. K! s printk(KERN_INFO "LED register sucessful!\n");
! w) r% l( `) }% h- }4 S6 i# Z* U. U1 Q7 {# r+ v0 i* ^
return ret;
9 z" d- b# d3 I( \( Z6 v4 e1 p6 B}0 ^2 F/ |" k$ D0 W: t9 S/ y3 i0 b3 i
# Y$ b+ c l% y- N( M
static void __exit led_platform_exit(void)
2 K! p: T0 [* j& P( ^2 c1 j% F{/ f; @8 @3 C8 H6 d1 X9 ?
platform_device_unregister(&da850_evm_tl_leds_device);, I7 P$ I3 Y5 Q9 g! S
) A+ r. o: U+ D printk(KERN_INFO "LED unregister!\n");
. s" p0 a& M2 N8 r3 r' ]' v& v}4 {& J B5 V( {& T. k
- I1 N0 g( T& R# m V; C! dmodule_init(led_platform_init);
% r. d2 _5 C( Y$ U; |module_exit(led_platform_exit);
. X! T' y3 i% G% U6 C5 d' j$ U3 h! s: y& }; Q
MODULE_DESCRIPTION("Led platform driver");/ x; `0 v; l# g& Q3 ^
MODULE_AUTHOR("Tronlong");
6 }+ [: J7 n- i: {+ ?" wMODULE_LICENSE("GPL");
: f4 L& u8 _; [) E# k
. M: d) ^- v3 h) ? |
|