|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- B n4 h, C- A#include <linux/init.h>
% l$ h2 n2 g8 b6 L8 ]# l' f#include <linux/module.h>2 |" D" P; c5 u& _! ^2 R1 T
#include <linux/kernel.h>
4 B" W1 I& j# J7 d0 J% X#include <linux/types.h>" R9 k$ ?8 E& X! I( `
#include <linux/gpio.h>2 h8 Q( R; s) d, \0 \
#include <linux/leds.h>1 [" w( a4 F9 l+ u8 S- M) ^
#include <linux/platform_device.h>7 k* Q! G% C) e- y% J
* U8 D; x+ l! I' @; d5 n
#include <asm/mach-types.h>
A9 t+ X0 A; U; m. W3 R" j4 s3 \#include <asm/mach/arch.h>" z1 Z( `) u( S1 j$ }
#include <mach/da8xx.h>
+ q9 C5 } P& Q. {0 L. c#include <mach/mux.h>
- p6 ?1 v$ s6 o% Q6 ^& V
3 D' k" h% |4 i) B, Q4 v: J#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
I. `( [7 k/ P, y; I#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 f' f R/ |' D c' ]7 D$ _ E
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 J) J8 U& Z" Z9 o
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% ^* R: {6 @; X; `+ J6 d
f! C4 k" K2 R/ X
/* assign the tl som board LED-GPIOs*/# X# Q5 Z6 e3 H5 y
static const short da850_evm_tl_user_led_pins[] = {! t* M2 y; i9 w) e
/* These pins are definition at <mach/mux.h> file */
8 X: D0 I0 k1 s/ M1 Z8 J% u4 I$ _ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( ^6 J7 ~% \, h: o -14 Z5 n; W4 m( F3 B' t4 Z! I
};/ b/ \2 |" A5 N$ M% Q( h: ]2 J
/ V& E: R. \' w) m5 ~: y4 e: ?
static struct gpio_led da850_evm_tl_leds[] = {
?3 h" _+ N* P _' q: B' y {+ n5 X- F5 B2 Z! o2 ?' F4 ]6 k
.active_low = 0," J8 z c0 c7 {3 ^2 V$ I
.gpio = DA850_USER_LED0,. |- [* C& `& c0 ~; u& s% z( `3 U
.name = "user_led0",. j2 s. J* _3 [2 }2 C
.default_trigger = "default-on",
. Z3 H; S; q( @( p9 Y3 _* E },
* Y6 s$ j9 Y# W n U8 f% D* ^ {
/ u! c, Z- _+ U5 _" J+ P .active_low = 0,$ h* _* \8 R H! S9 ?" ~/ ?- a
.gpio = DA850_USER_LED1,+ X2 v$ u8 |+ Y% |; V
.name = "user_led1",% w* n. {$ D) B: S
.default_trigger = "default-on",
5 ^% A, ~( U! ?# ]: a }," R1 N) Y& Z4 K+ O
{
( _( D/ E8 u9 G( Q( v" b .active_low = 0,
/ L/ B1 x; D0 v* O- ~7 V .gpio = DA850_USER_LED2, J( e q; |( r/ e' ~9 U
.name = "user_led2",
# h, w! p; b4 K8 L, L t) Y9 ~% d) g .default_trigger = "default-on",
# g5 \) z+ ?' | },. V0 N) l& J6 M1 a0 E0 i( K
{
+ y l; |, A& F1 w& g! F .active_low = 0,9 P& t- w* E# s o) o9 f; u
.gpio = DA850_USER_LED3,
$ N: t0 c* ]* I .name = "user_led3",
0 m! k* \2 U, ], O/ {- u .default_trigger = "default-on",
9 Z% p: `; B9 ]! R# D* e! u },- \0 S" C7 g2 K4 V6 j( @: T, {
};
# W: j$ S# \8 f$ {, S: G1 B) v
2 i) j7 A5 r3 _ X5 I' V) zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& Q+ m/ @7 L8 ~/ y( d
.leds = da850_evm_tl_leds,
& I6 M6 w% F6 \5 V) Z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 @$ n- t% ]" h7 x) `3 | a
};
2 I* C: g. W. `- x* j
+ G; p( m% M- ~3 q# \2 Gstatic void led_dev_release(struct device *dev)3 O+ f9 O. a/ ]% M
{4 ?8 u, C/ ^) f8 n
};$ S$ n+ f: k$ u4 }* m
7 C n+ `; a4 b. m9 k0 p, wstatic struct platform_device da850_evm_tl_leds_device = {
: T/ H" {6 C" s6 u4 Y$ g2 C .name = "leds-gpio",2 z8 T0 P- G& C v/ x& @) o
.id = 1,
# i9 j9 R4 U& R5 G' n6 q& X .dev = {$ n* l4 ?3 h( S2 ?) G6 o
.platform_data = &da850_evm_tl_leds_pdata,, w* ~/ f& w1 @. Z C! x7 W n1 ?
.release = led_dev_release,
5 k u# I8 t0 ~0 m }
* }* v' Z0 B. X' u, M+ u4 k# Y. k};
( N5 i( @6 s, J$ e. r
9 F4 f6 d2 ~) u$ y7 Jstatic int __init led_platform_init(void)" l2 \8 N- G5 A ]
{
; |% b' w9 e" t% Z int ret;4 o3 d% j/ t' O: K4 W8 ~0 o1 N
#if 0/ x5 F1 X5 r7 H
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 o) c* d @5 C
if (ret)# V* e! g6 c d2 e# P% |- x* m
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: J5 ^' G; {& J& X "%d\n", ret);" L* A3 l/ V1 h; t
#endif
! L6 c' s* N/ e ret = platform_device_register(&da850_evm_tl_leds_device);6 w5 ?7 D: O5 Z9 K. Z) R/ Z
if (ret); j' c' U9 Y' d
pr_warning("Could not register som GPIO expander LEDS");. B9 J+ Z7 g+ }! E
else& ?, {- r; v2 `4 t8 ]
printk(KERN_INFO "LED register sucessful!\n");
# B! G K9 U% {% X- ? J; F D7 \7 i, K: \5 Y
return ret;0 _1 g% K) s6 H! A+ Q
}
6 C8 Z4 x/ `: K3 L/ \) y. l; K
9 ^ ?+ N: p% estatic void __exit led_platform_exit(void)2 {9 q" @9 T& e" |6 t, y
{( s$ p, n1 C) s; b( ]9 d
platform_device_unregister(&da850_evm_tl_leds_device);2 y" G2 J1 h' [( Y+ i( d" O4 ?; O
* v) w: S% ^+ J+ [( x# V5 W8 { printk(KERN_INFO "LED unregister!\n");
" Y! U y. ?; ~! a- G}
" C2 L& G2 r: |6 }" l
2 x* u6 h9 ]: ]7 Y; e+ ]$ \module_init(led_platform_init);9 U. e2 X- d# q% h& x- J( j* x
module_exit(led_platform_exit); P- S$ \1 q0 u* R' B4 f
2 ]% F( S2 r0 _$ Q
MODULE_DESCRIPTION("Led platform driver");0 k; I0 K( }. u* x
MODULE_AUTHOR("Tronlong");
! U9 z$ A6 |! X" y! mMODULE_LICENSE("GPL");
5 x# m' U" f8 b/ Z
- P* L; u+ S! A |
|