|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. m7 c! B5 n e$ U
#include <linux/init.h>" Z; @6 T. d9 ~
#include <linux/module.h>
& t: {. ?. T, v# t#include <linux/kernel.h>
7 m8 s2 ~, c& d; }#include <linux/types.h>
0 M! J5 p; e# X0 v#include <linux/gpio.h>: O, G4 H$ _$ {6 Y2 j
#include <linux/leds.h>+ g% N' X+ f9 ]0 O
#include <linux/platform_device.h>
3 X2 u+ [- _# W" N: X$ }* g C9 t+ n5 }& I/ A; G$ |
#include <asm/mach-types.h>) r5 j' O, R9 m+ K# k
#include <asm/mach/arch.h>
1 o g; H+ A' Z) `; o+ G2 ^$ E5 J# Z#include <mach/da8xx.h>
+ \5 N/ H3 v3 S4 V( S! @#include <mach/mux.h>
* C+ p [# G! d2 t# Y% X% w' q
# s+ ]6 o7 \4 r, v7 Q! e1 }* ^#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 U! P# J$ ^6 O1 L
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# M- Z7 T+ R* E. e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ V9 ~; _) o% d. E4 O! X
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) f& j/ c2 ^4 Y+ K
! z; U- y) [/ D# A# M3 i& E/* assign the tl som board LED-GPIOs*/: x9 _) r& z& m2 q8 K
static const short da850_evm_tl_user_led_pins[] = {8 R7 J# v, g0 n$ r w4 g
/* These pins are definition at <mach/mux.h> file */7 k* G1 d0 i6 v Q- @, E" l
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; `2 s' f1 d7 F' h' b1 E8 |1 o" v5 `
-1
1 _4 G5 a/ j8 ^};
9 H. t3 ]0 R% f0 [+ W* n* T+ z' l2 G1 v3 j+ a3 E% n5 B
static struct gpio_led da850_evm_tl_leds[] = {
' y! r1 p7 f. d: r) y% J {3 e4 N) v, X( t+ t5 U: ^
.active_low = 0,
, B3 g. j; s3 s7 i .gpio = DA850_USER_LED0,
' O! D* A$ ^$ D( ?6 E' r4 j .name = "user_led0",) }! |; R/ \# z- F. s7 @
.default_trigger = "default-on",$ M) p0 g8 `; U& F- q
},
; f- w# ^: Z+ x5 \ {
2 m6 A( A# F+ Q* ^, W/ q# n+ ^ .active_low = 0,
/ _; }% J7 i% e- ]& I* u .gpio = DA850_USER_LED1,6 A7 U4 W4 T: x" ~. U( N4 U" W
.name = "user_led1",
5 L, I" t# ~1 q1 U$ i" {0 J .default_trigger = "default-on",
" ^7 F, ~" A3 E9 a m5 s Y: J },
; O0 i$ H5 e- F% z4 g0 d7 c) j: U {3 E& Q* p @* a( {
.active_low = 0,
. z3 ?8 r# c$ U9 A: C" m .gpio = DA850_USER_LED2,
( J: _5 K& O5 ]) D .name = "user_led2",
@9 T# x# p& t: c .default_trigger = "default-on",, Y9 v* f& }: g% `$ l+ g
},
1 @1 f" s- ~* V' O( a- c8 b {
) j# W& s7 n4 S/ ~ .active_low = 0,
1 F( F, X' Q% M h0 V4 O .gpio = DA850_USER_LED3,
( m% G% q# B, n% w7 s$ W8 L$ F" L .name = "user_led3",4 d6 A; N1 }$ Z; A, z
.default_trigger = "default-on",0 v, A" ^/ W4 H
},) w2 Q" W2 S0 q: u5 B
};% E0 E) Z* o0 k) \
9 z5 i5 O+ T$ p% K: e1 U! E
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! N* C& h/ M4 P; e# X1 X) G8 ] .leds = da850_evm_tl_leds,/ [: K: h t' A5 [
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 n/ i1 t/ P7 L* ^};
/ }- `7 h4 ~2 k3 p1 b
' T$ C! R6 c1 Y' W: K7 sstatic void led_dev_release(struct device *dev)
0 M( h- }; r6 o. W! C% @. N{
: K* M+ y0 G p, n: ?4 L};& z: u/ H' b( M& l) a
, A4 F. Y3 E% a8 z) {( c1 V: Z; }
static struct platform_device da850_evm_tl_leds_device = {
/ J1 }( _* g/ J/ \, B6 m .name = "leds-gpio",
6 s/ C# G N1 u& \8 h .id = 1,' X: R' q& C* O8 _; g. ?9 y4 T
.dev = {
" i; M0 i5 w ?/ C. f( d .platform_data = &da850_evm_tl_leds_pdata,# B C# W* N$ d: k( Q2 C
.release = led_dev_release,
. H3 \- C! {( y }
; f' j1 Y/ g) y. z};( u/ J. _) O% P7 V
0 S8 C6 `- r" W( g8 s3 J* ?) s8 |' Q
static int __init led_platform_init(void)( q- d; }; u: m9 i, _% D( U
{$ S" y* }% r4 R9 }+ \- |/ \/ {7 V0 n
int ret;
; L9 d) v9 e8 I/ T#if 0
5 T( v0 I2 J8 a" \; L5 k5 U( I ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 S2 F) @: }6 w
if (ret)" Z& J) x+ U5 p7 u$ _
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 L& R$ }6 D I& f "%d\n", ret);- y5 I8 A! x3 d' `- z+ r
#endif
$ q) x/ @5 ?$ q& v ret = platform_device_register(&da850_evm_tl_leds_device);0 Y1 I4 }* {- f
if (ret)0 }9 ?% |) y! m0 B" g" L* ^
pr_warning("Could not register som GPIO expander LEDS");* P+ P+ q% J! Q
else+ m" J1 I) o/ N5 E! D
printk(KERN_INFO "LED register sucessful!\n");
1 `! Y; [3 ^9 G
9 {4 ~& Q- ~. Q* a/ A: Q: {4 c8 O return ret;4 }4 F: [& J( {1 ^' z: K# R/ b
}/ F2 K" @, Z; M: u& a' I( g
* Y ?& ~8 c* X. u2 Nstatic void __exit led_platform_exit(void)% W6 c& ?, K! R' J; B6 H) n, S" W
{' k; W, D3 i0 w# X3 u
platform_device_unregister(&da850_evm_tl_leds_device);8 E6 r* ^2 A \7 \. |% Y
5 K0 J2 Q' W4 E, u c. K4 { printk(KERN_INFO "LED unregister!\n");
% v- T8 Z' q) T9 H" Q6 M}
) b4 `( j5 v( ]
! Q4 w+ W9 H. l" I7 F' }. i5 @% F3 pmodule_init(led_platform_init);% g! G0 W# e, [$ l9 k0 }- X& y1 z! L
module_exit(led_platform_exit);; Q: ?7 x2 r8 p4 O" F/ F: \
2 k( [9 w2 N! F2 `MODULE_DESCRIPTION("Led platform driver");, k: L8 V6 K) |! G
MODULE_AUTHOR("Tronlong");( u# w4 a$ _: K$ {- G+ ]
MODULE_LICENSE("GPL");
1 K# Y# T; j* b" j0 Y9 t) s/ A8 X5 S
|
|