|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 _- k5 U5 I- c
#include <linux/init.h>- @" v5 j' W) [# v; J' R: y" c
#include <linux/module.h>* L" J0 A1 p. D3 h9 F
#include <linux/kernel.h>) [+ y7 Z; B9 L" X' A7 M
#include <linux/types.h>7 t) b. P) M V. O( b' Q
#include <linux/gpio.h>3 H4 k' _$ X$ @7 n# w+ e: q/ K
#include <linux/leds.h>0 }- I: I F& X0 u; \& B
#include <linux/platform_device.h>
+ L! v" ~5 M/ S& u0 k& R( C2 Z3 ^; U. W: D; i2 y
#include <asm/mach-types.h>
' @" ~3 i0 h* T6 k# r8 n# k#include <asm/mach/arch.h>9 z5 S- n6 E# Z% u2 g7 y* O
#include <mach/da8xx.h>9 ]6 _) f+ W! f$ i7 T, B- m
#include <mach/mux.h>
! }' t. {& V5 I. Y+ {9 j$ o7 o3 o" p+ B
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 n+ [* k f+ X1 ?% a9 ]4 }#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 m! U+ X: d8 ]4 N
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): K0 Z$ h! V0 C J3 x. _' n
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& Z% j# b; z3 F% t$ x2 c2 _
! M7 \1 \* i+ S/* assign the tl som board LED-GPIOs*/
2 f( @4 t& H* d; istatic const short da850_evm_tl_user_led_pins[] = {
. ?8 v2 f' N9 L6 m /* These pins are definition at <mach/mux.h> file */1 n) D, t* W% L. Q+ c I1 k
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# e% Y3 C7 `/ q: p1 I: o -1
& |- ?* Q8 N5 l( Q, f4 M) F: E};; W4 X& \; u4 I
: H/ r1 v- X8 J% Gstatic struct gpio_led da850_evm_tl_leds[] = {" G7 g/ Z% u8 t7 M! _0 _
{, M4 N7 i) |' w3 Z9 b" ^
.active_low = 0,
( }7 O! G. i; i) Z1 T8 ^9 b .gpio = DA850_USER_LED0,
+ ~8 }8 I) b/ y0 I. n: ?- x3 Y .name = "user_led0",/ s* @/ y* g- z( x/ {
.default_trigger = "default-on",2 [# W1 H7 X) [4 t: ~( B
},
' \) n4 \ K: M. X {& c0 X) v7 b: V
.active_low = 0,1 N2 P" E! b' c$ o4 {
.gpio = DA850_USER_LED1,
9 T1 L6 Z1 b; N9 R% ~& X0 C; W" q, W8 _! r .name = "user_led1",; C' y Y5 o$ I1 A: N
.default_trigger = "default-on",, D: Q4 i! F: [4 z# c' ^6 a5 X
},
' {: u7 {& E/ Z) {4 I3 r# h {3 q% h8 t4 Y: g0 o, z
.active_low = 0,
6 k' k2 G; `$ l; U8 C" Z .gpio = DA850_USER_LED2,5 u) |; c$ N) F- g% f; S
.name = "user_led2",$ D( N/ T: r; N ^7 x
.default_trigger = "default-on",
1 q2 n2 r8 e; Y% q7 ? L4 v },2 I4 j2 U) Y M5 c! b
{- M1 }6 y$ {- P& p
.active_low = 0,
8 H) t+ F/ ?' J .gpio = DA850_USER_LED3,
~$ [" E& E1 M8 A3 D" o) q7 n .name = "user_led3",+ V! g: p( p+ _! I% [, i' p# w
.default_trigger = "default-on",
m/ @ h8 o9 ]+ [, K+ i },
& z- x. X8 E- Z};
4 L6 N; H! Y/ ]+ F3 M- r9 J2 B* O1 s: ]2 }6 A6 X
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( z+ w/ Z" Y& R" N8 G& { .leds = da850_evm_tl_leds,
0 D* i! L% W+ X5 W& @ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 F' n( {& l( E7 e+ x& H};
7 i' h- }! ~6 G% X, e* |* |: c0 S( M8 {2 o; ~: n1 B& o& E1 [
static void led_dev_release(struct device *dev)
; p. o0 z% ?/ u* ~- C/ H+ z{
2 g: D7 ]; }( }$ S};( O" T( k/ _2 M
* ^4 ]/ F% O! n/ L+ ~! n4 L' K( v6 o
static struct platform_device da850_evm_tl_leds_device = {
+ g- k: }/ } j .name = "leds-gpio",% T9 q) w6 l! U( w6 L3 b
.id = 1,0 E' X1 n' ^- l$ H/ P" e
.dev = {
, ^% ~+ C' T9 k* U: u .platform_data = &da850_evm_tl_leds_pdata,
( k. c3 K8 c$ ~$ s% V# @. T7 Q .release = led_dev_release,
: N2 N* E( |: y" N: |1 k# E; j }
+ d) W, f6 e) Y};# I: p3 n7 R7 q$ o
7 O6 v9 K# T4 S( Q# {8 E8 z( hstatic int __init led_platform_init(void)
3 ?; i" [* R C- u& N{# U& a2 J/ [$ H; z6 k
int ret;. U( Y* `6 y8 d T( X
#if 0
" N8 q! k! a" c2 Z8 q/ [" S! m0 ~ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% n$ e. |' c- x$ n) J5 ^# e
if (ret)
8 g: f$ E. h- ] pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 ]1 J; m4 J# I/ g! m+ i9 k. E
"%d\n", ret);
" K- I) F- a4 p [' M1 T#endif" n+ y5 G6 S: j3 b! P4 v3 Q
ret = platform_device_register(&da850_evm_tl_leds_device);# R/ c/ I1 b) `7 O* b. I! P
if (ret)
8 u" Y) Z* i5 |2 u pr_warning("Could not register som GPIO expander LEDS");0 L* C4 s; W H/ H: ~! D. j7 [
else
8 B, t" X( @; U0 p( k4 q& { printk(KERN_INFO "LED register sucessful!\n");
0 n2 l# V" F' ]2 V0 v6 v3 A! z |- \8 ^5 {! j
return ret;
: b! d! V' ] ?/ s! W}
$ G5 p7 @$ ^6 B, k: \# t0 U9 |/ B Z# o$ } V4 _, t& |8 P
static void __exit led_platform_exit(void)
' \0 _+ L9 G( K{# [- v) o# B! Q8 B; Y8 g% p$ I5 m6 A
platform_device_unregister(&da850_evm_tl_leds_device);0 C J, r l" B9 \8 \
- m9 M% I# T' ]* h
printk(KERN_INFO "LED unregister!\n");$ F: V* S3 I: m* E9 y: s+ G' Y- X, n
}
9 ?8 g8 z" x2 `. X$ H- x9 @/ L) h! |, K
module_init(led_platform_init);6 Q* }4 T; O! }
module_exit(led_platform_exit);
" T* v F% Q5 `/ G s" `* D) A3 G& e
MODULE_DESCRIPTION("Led platform driver");* U3 H% y; R5 T4 q9 D3 _
MODULE_AUTHOR("Tronlong");: i8 S d- r" j% K
MODULE_LICENSE("GPL");
' a$ w; j1 ~1 R3 J! o5 X
$ a* I, [9 r _; w9 R |
|