|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, C9 B- E! w+ u$ g6 D9 T1 N#include <linux/init.h>
" I; B% ^( k& Y#include <linux/module.h>
3 ], E" I3 z; e- H2 s#include <linux/kernel.h>! i: }3 z; K( q; _1 {5 N8 u
#include <linux/types.h>% I D! f) C0 @& Q5 Y/ |
#include <linux/gpio.h>
! R4 C' S- l8 }#include <linux/leds.h>. T5 g) I& S% ~6 J1 I/ G, u# J
#include <linux/platform_device.h>
" V2 e4 F$ m" P6 f! S" F2 ^
3 Y- E3 z4 X0 y4 R Q, n+ x#include <asm/mach-types.h>6 h2 @1 m: x' }
#include <asm/mach/arch.h>
( p% C) @6 o1 u#include <mach/da8xx.h>
" }! A" P1 b. a( r5 y#include <mach/mux.h>* G) b, c: m* \; g! c
- o S! z: h; B/ Y! G: A4 s#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% M* L) ?) i$ j) V, d0 Z2 J0 @* z" ?
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& B* Q( b3 x" ?6 T2 u( Q9 c' W1 j' H#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* v2 f0 r5 [$ R#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# h9 \2 {7 N/ x x$ F! o' l- U
4 K) t3 ]- k1 D7 K2 h7 \/* assign the tl som board LED-GPIOs*/' t% u0 T$ q/ ]' O4 A6 ]1 M
static const short da850_evm_tl_user_led_pins[] = {
2 _4 i, q/ ?5 w7 s. P; H+ H( e /* These pins are definition at <mach/mux.h> file *// y' q. i0 q' K! ^
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% ~. g' A) O- Z+ V' H
-1
! L2 I5 Q6 L3 N! v};, s- \0 k. _5 W' q, q
" h9 C: {- }( ^$ b7 xstatic struct gpio_led da850_evm_tl_leds[] = {
+ G5 R. J/ q4 b5 i6 k! P! V {
7 _# n |& G+ R% e7 o7 Z& T .active_low = 0,/ H5 z5 B5 h, y. W. _3 y
.gpio = DA850_USER_LED0,
+ w0 M4 a3 Y% O .name = "user_led0",* O9 Z+ @: Z. e% f* O7 S
.default_trigger = "default-on",
! ^3 k+ {+ i) {$ O; ]( } },
( J9 {; _* e$ C {
. V, m/ K% F, i- a. w( E .active_low = 0,1 [" z G2 n2 g. J- Q6 @2 ?9 Z) {
.gpio = DA850_USER_LED1,
$ U2 r) D4 Y' P% k. T) J3 s, A/ m .name = "user_led1",
7 z% r+ R7 a5 a1 N- m1 D& f .default_trigger = "default-on",/ @+ c- }( q4 O; ?. C j
},+ a: u% E9 B; Z) b" f7 U n# C
{
# K( s0 D3 k6 ]3 o+ H9 D .active_low = 0,- F% E2 H, Y; L ]. A
.gpio = DA850_USER_LED2,( x2 c Z! } A( t- W; F! g
.name = "user_led2",
4 _$ E' J) f) R( |5 F7 Y% f .default_trigger = "default-on",
e( l5 _7 H: B4 x) i },
: a; q; u5 ~' S8 N {
! u2 J* O* u( a5 w" y) t3 a .active_low = 0,% Z) K4 @: f T" O
.gpio = DA850_USER_LED3,
/ ^$ J) j4 [/ _) U+ K4 u .name = "user_led3",- l8 E) c7 N9 g- s/ A' d
.default_trigger = "default-on",4 B _. o4 ?1 A6 a1 t
},
! ?- k+ ~- f8 i9 u! I2 E};
r2 z3 i7 X5 t* q N. u3 i1 X- _) K- u. q# i
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( g1 S: x+ r$ D& U4 x H .leds = da850_evm_tl_leds,# m) @4 O* U. \. X( t0 C
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* h6 z% Q2 i' B }* r& _" n};, L' }' U/ @4 j5 _* g% _# I+ {
% f" Q* G; {: ]( qstatic void led_dev_release(struct device *dev)* C3 |7 m1 C0 d1 u- @7 H
{
& k. @' ]6 U$ E( @( F- K. K9 |6 n3 V};: |! ] m2 F* S$ V) a8 T" N
% \; a, G8 e7 r) D0 _- f
static struct platform_device da850_evm_tl_leds_device = {
4 P0 C2 |4 i1 F2 T7 w .name = "leds-gpio",
+ C2 s/ u, i2 j: T/ H+ W' I" b, B, [- A .id = 1,
2 m# F) G) I% q7 ]7 y s2 ? .dev = {
9 [! n; h$ N5 n' Y5 S( l .platform_data = &da850_evm_tl_leds_pdata,
3 z" u/ _0 {3 B" `0 P; h* b: I* S .release = led_dev_release,
1 U( ]) M6 H1 Y+ W% J }
; M* W- p* e: D; E};
& g/ `! K' E7 M3 i4 i8 N0 E0 o& r' v9 K* V `3 l" c# Y! u
static int __init led_platform_init(void)
) U) ]2 W A0 Z# v& K/ r3 P; Z2 J{3 Z4 \7 M, h; G
int ret;
" J4 v3 i( c, ?8 ?$ f#if 0
. |5 E! l) F$ W9 n) e+ A) G0 [' ?1 Q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 P5 e" K" o% p0 r+ i0 X% H if (ret)0 P. E- U' I. r
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; p' U! M/ m% m* K# V6 \* L
"%d\n", ret);
" b$ Z" |! f, `; d+ |9 S#endif
5 t: |$ k& }2 a E2 d* ]. u9 s ret = platform_device_register(&da850_evm_tl_leds_device);7 Z3 V( `. ?- z
if (ret)$ }+ a2 S8 w/ P8 P$ P4 _
pr_warning("Could not register som GPIO expander LEDS");% z; ]$ A. R# x) o& p) b
else$ H( R# U7 s2 G Z
printk(KERN_INFO "LED register sucessful!\n");9 k. C% K7 X+ c3 H! ?' \ p
) S" J: v+ ?8 H2 \: `1 C8 a4 G return ret;
; P% Z; O q9 H9 C5 y, O}
* g v, O) {5 d# S" C- {1 n
6 v( N7 i3 e% v J% n: nstatic void __exit led_platform_exit(void)4 c, ^" m7 `* Q+ Q: \+ X
{# a3 f" b. f3 z* H; h S# x
platform_device_unregister(&da850_evm_tl_leds_device);
; z; ~- q" v. m0 y* K% [, w5 R9 l# M, E: s
printk(KERN_INFO "LED unregister!\n");
8 |5 v6 o+ V+ ?, J( G2 m5 e$ U}+ ~% X9 r# }# T* i) |! X& t% ]
. R9 s/ |1 y5 V7 x C! y
module_init(led_platform_init);% f: V; \* V" l
module_exit(led_platform_exit);
( n$ q9 B) ?/ f3 l/ U' |* _7 v7 ^% q4 L
MODULE_DESCRIPTION("Led platform driver");, s5 B3 n; _) v3 x
MODULE_AUTHOR("Tronlong");
" U1 u9 Y8 P% T* e9 W0 |MODULE_LICENSE("GPL");
0 K" ^6 p) q/ X$ ~3 |! l, m6 _0 p% X% o% z- N R) s
|
|