|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ z* d# h2 x$ Z0 p5 @, x* w#include <linux/init.h>% {/ a. _/ ]- e$ P
#include <linux/module.h>& ~# G3 @. G$ _7 c! Q1 x
#include <linux/kernel.h>
& I- m' J: u) v; t#include <linux/types.h>
4 w+ X" ?3 a' y3 ^5 }#include <linux/gpio.h>* F, E/ Y5 }0 E; E. V
#include <linux/leds.h>
( l: q g" ^ {#include <linux/platform_device.h>) s4 n/ r, ~3 U: I# |
( h% z" x- I# \5 [#include <asm/mach-types.h>2 \7 ?9 y0 E; @# G! b
#include <asm/mach/arch.h>" c1 u3 b9 w4 d5 I
#include <mach/da8xx.h>
) Y5 l1 ]7 c" y- C9 j#include <mach/mux.h>4 ^! _! O5 {& I2 h
, ]' |8 b4 s. c6 f% ~8 ]
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 U9 l& }8 B0 |9 X+ W7 `! D#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 @( J/ U' x$ x
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( W) g V* u1 C' l& B0 Q0 g#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; x" I% h' F* f& I- g0 N' o
2 Z1 u: c3 W2 o6 w2 k9 D/* assign the tl som board LED-GPIOs*/1 M9 S0 y% m0 }: c
static const short da850_evm_tl_user_led_pins[] = {
3 |$ s1 S+ g1 S# z% p8 E /* These pins are definition at <mach/mux.h> file */% `6 y) c$ K/ ~+ s
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 U, `& m- V5 I
-12 L0 y* Q0 B: O
};* b. W9 f4 C* b8 t
9 ~5 z8 J: D( vstatic struct gpio_led da850_evm_tl_leds[] = {( [$ ~; b) d0 O0 m. d5 @/ X
{7 L' q0 T& m. j" k6 `' D
.active_low = 0,4 {, N! F2 T3 \8 `
.gpio = DA850_USER_LED0,
. ]2 N' H& E/ j( m .name = "user_led0",1 s I0 D, Q, E8 ~3 x1 x* h- C5 Y; ]
.default_trigger = "default-on",& \1 w$ D; l" Z# i) d8 F/ O
},
9 v" D X& Y; ?( t {4 N6 X' R N1 p2 m( @# E$ [
.active_low = 0,9 ?# ~5 ] s0 F) V; O! c
.gpio = DA850_USER_LED1,) \, }6 i6 m8 M, \% ~" @
.name = "user_led1",5 u6 W; j1 {8 d& T9 W. @
.default_trigger = "default-on",
& v# n) Z9 \0 c+ _ },
! h8 n0 L6 R. ~: ~ {' `. A3 D E i' b ]
.active_low = 0,# A/ z3 U# z+ Q( N$ @
.gpio = DA850_USER_LED2,0 N8 t" W0 n- h( M2 B, X, H
.name = "user_led2",
% _3 R1 E7 Y3 g9 D) Q2 M .default_trigger = "default-on",
- W$ X- F- h/ r },
" O2 i2 p4 N, i2 J2 a4 n3 t {: Q7 d7 a5 j2 L: s. Z
.active_low = 0,' ~* P! S' h$ a
.gpio = DA850_USER_LED3,
! m/ Z9 {/ q5 N+ K' c' _ .name = "user_led3",
+ h) W8 R) o+ `$ G4 [* R .default_trigger = "default-on", c* c6 r* v6 t& C7 v, r* x2 {
},
# S4 ]6 a; L3 e( d# h};! V4 m' ?, H! @
' [0 E/ {' s* K
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 r: t. o' ?; H* H$ B% ^$ x .leds = da850_evm_tl_leds,9 F9 B( {. B1 p0 @& \0 Q0 T
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),* D) H3 M# p# ?% Y( R+ u1 w4 `$ s
};: P* C# d; Y, ~4 ?' ^( q0 U6 y
9 L, L( Y4 K3 _- _* l5 I1 G3 R
static void led_dev_release(struct device *dev). B2 y# A: g' ?5 J2 n9 Z9 X# x
{
3 y0 ]: Q3 h* N# P};
$ Z% E! U# i4 u! d/ y
6 K7 z; U1 c7 U: F* L) b& w% lstatic struct platform_device da850_evm_tl_leds_device = {) K0 e0 I$ [7 [% K# k% m
.name = "leds-gpio",
1 Y6 w5 o$ @7 x6 ] .id = 1,
8 k5 u; `4 h- U) J. C+ y0 g9 v2 q .dev = {
/ ?/ I K$ E1 r# d( I .platform_data = &da850_evm_tl_leds_pdata,
/ T+ S9 z( }2 V .release = led_dev_release,
9 y9 t- q( L2 W$ p }
4 |( |' T! O, n8 c2 k};
# b& ^; v! T S8 p& S; O+ U/ l6 ~7 {4 z4 v* ^; N' \
static int __init led_platform_init(void)
0 j* b/ n' M: `5 Y{
/ v8 H6 g& p1 R& Q' V" G int ret;# K' F; u- z+ m
#if 0
& p" [+ d& g9 \% t ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* ]) B6 a4 `1 h$ Y l$ T# F if (ret)
2 i. m1 [7 t; a) q1 L8 m, G9 [' g pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 `- V( M2 y& S* \. @; }
"%d\n", ret);
( b6 b6 d. {' D+ v#endif
) d+ F" Q l, H" P8 ] ret = platform_device_register(&da850_evm_tl_leds_device);
5 z- Y6 ]& d- T# V: U- @0 f if (ret); w" c4 T5 a3 A5 ~! E- X
pr_warning("Could not register som GPIO expander LEDS");1 v/ Y% P9 U9 S1 Z- H @: m
else
0 ]) R3 b8 ~4 D* ~ printk(KERN_INFO "LED register sucessful!\n");3 }# k5 n/ W" M6 Z2 T( x- m: M
+ S% }' e9 a& g! _5 B return ret;- w" h- \' ?3 S2 ?7 ~, _) L
}% F8 F- w" ^. n$ R2 u
/ a! ~1 } t4 }8 V4 ^( o ~static void __exit led_platform_exit(void)
" w' C" P- T" O& p{
' b* D' |7 j0 e s/ n; G0 ? platform_device_unregister(&da850_evm_tl_leds_device);
( q8 e( H( t7 n
- l, f" w; \" w& y3 ? I# s printk(KERN_INFO "LED unregister!\n");
& Z+ K7 z5 K' \+ O `- r7 F, `& w% x} L# f; X& a. I9 K- g- \" ?
& n- P) _# x0 d4 B, ~4 g# ?module_init(led_platform_init);% h4 g- v8 Z% A
module_exit(led_platform_exit);
. w2 U2 F; ^5 j. S8 s' g" E6 M3 \7 D8 L# `4 }6 v7 F# k) {
MODULE_DESCRIPTION("Led platform driver");/ o0 d. ]; b% n% J
MODULE_AUTHOR("Tronlong");5 r' y. l- m" W; z- g, p' z# @
MODULE_LICENSE("GPL");" q. R5 L. m% e; u" t
, q0 h" o- d! ~5 E |
|