|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 b7 G- T3 h, F" W' R/ Z
#include <linux/init.h>7 h# i7 k7 j/ I
#include <linux/module.h>! A5 f) S) R) _7 y% x
#include <linux/kernel.h>
( L& ?- |# V2 q2 S#include <linux/types.h>
0 T# k+ X7 v6 n) L- y$ j#include <linux/gpio.h>
; u c+ G( i. G# R. z#include <linux/leds.h>
* r/ [/ j& l* A& H7 P#include <linux/platform_device.h>
4 U+ A# U$ _: t g+ C/ C7 k. ^0 {. ]$ n% Q$ L
#include <asm/mach-types.h>
% D; U" K/ @; g4 \( \+ i#include <asm/mach/arch.h>
" m' |! r' u* T+ B1 A: f#include <mach/da8xx.h>
3 g7 k A0 o/ l1 S2 _#include <mach/mux.h>! q/ @, y9 t0 b* l0 ?
0 ]4 n4 ~7 Z. K! m5 U# i#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- S3 q* D) x8 K% X& s4 t w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. I7 [4 `% Z" [6 C#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); D- z9 m; o7 G0 W: q5 Q* v
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 A4 A- V" O1 Q; z& v; n$ b
# W) E5 _! [9 Y1 R$ S/* assign the tl som board LED-GPIOs*/
% ]/ N1 W* S4 d/ x* F+ l5 Bstatic const short da850_evm_tl_user_led_pins[] = {6 R0 I+ U8 l/ u( j$ ^& C
/* These pins are definition at <mach/mux.h> file */
, R9 I3 m p- Q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 q& H# @7 W3 z# k
-1
/ s/ _/ M. ]) j};9 V5 {" ?1 [: Y
+ i+ [5 N" m1 `9 Gstatic struct gpio_led da850_evm_tl_leds[] = {
6 W% W4 A3 z, F- d {
" ~( ^& \' X- W. t .active_low = 0,6 ^) P# x1 m. C, E& Y# O
.gpio = DA850_USER_LED0,
+ n: u2 E6 L; K; u/ L2 M# a .name = "user_led0",
# o/ i; d' h1 s0 }1 m$ L' t3 E .default_trigger = "default-on",- K( U( W% Y, F2 S9 d( k
},
! t+ a/ N |2 j( h {( N% e) p% _6 y0 q" g2 c
.active_low = 0,
6 \: a- E4 _2 e8 n- t .gpio = DA850_USER_LED1,8 {7 j( M4 J$ S! [
.name = "user_led1",
* u) r2 D$ `' v1 ?. q8 K" _1 N8 Y .default_trigger = "default-on",- W$ P7 ~) b% ^1 G. _
},9 F3 n4 D" w+ ]- P/ X
{0 k0 z5 B" f. D5 \+ r8 |+ l
.active_low = 0,+ m+ R4 k- h, [0 G
.gpio = DA850_USER_LED2,
! [* ~, F0 y& `+ I' A6 T s .name = "user_led2",
$ c" b2 _; D7 W1 W5 z4 t4 }& x .default_trigger = "default-on"," W0 \$ q# j- p1 s1 ]4 J
},2 ^0 V3 p% o- v8 }' S4 `
{
3 T$ b( T6 c# H) A: w! a) F .active_low = 0,
- o+ q- x# m: \2 z- ^# E .gpio = DA850_USER_LED3,) I5 y K# E4 A( Y2 [/ u' n( R
.name = "user_led3",# p) ]3 O$ k% S6 X' z3 p
.default_trigger = "default-on",
5 J0 d* J& X% h( S. g: T9 m( }/ H },
' N6 D) q5 w( O6 R};
3 v" _% u7 R7 M# l+ U, {! q
% I& s% r! O$ Q Y F+ {, H/ ~! [static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- P! _8 B# W+ o* y8 v .leds = da850_evm_tl_leds,8 P4 j7 ], O) i! i' J2 r& H( t) e. k$ X
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 }% I: T; x# [( U* t};
+ \5 L3 R" [3 h9 V7 F3 P& z( ?! ?$ @2 Q# V0 m# c6 A
static void led_dev_release(struct device *dev)9 B% s& j8 `6 `$ `4 s
{
. y, R+ H% T, q* n0 S# O+ K1 s};
8 E- U* w" Z$ v( s/ Y- e* D5 C1 |" F) ^6 v( V
static struct platform_device da850_evm_tl_leds_device = {- p* Q" l4 h- V1 e& u% V
.name = "leds-gpio",
! O" J6 B5 ]) L2 Z, @0 U9 O .id = 1,. E8 |* N* @8 i0 j0 H0 ^+ y
.dev = {
$ Y6 {; J" J0 L! |# T. E$ Y) M .platform_data = &da850_evm_tl_leds_pdata,
: o) j" [+ N3 ]. y% | .release = led_dev_release,
( E, G7 W& b* m }
7 L/ g* \1 R) G& T5 o8 y};
) K* b# W* F% ~( y9 p1 I: b
+ }" P- b) {, B1 I _# Gstatic int __init led_platform_init(void)! M# l7 U7 I, z( t
{
# W. ^7 t* k Q# G! |6 ~ int ret;/ i( ?4 x1 ]' A L9 A2 q2 v
#if 0
; M, k7 s/ A6 `9 b8 X ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 g; n+ G; o" k- O7 n if (ret)) P% P. T2 a; B9 {6 U# Q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 [' |- ~. }2 Z$ O "%d\n", ret);
. h2 t7 A. ~: h#endif% ^! x# ^( L8 @* e% X5 G' b) M# x5 B
ret = platform_device_register(&da850_evm_tl_leds_device);5 s1 ~" }+ L% e$ L1 H
if (ret)( g) k+ i8 T* ?2 B2 t# ?/ ]. A0 K" Q
pr_warning("Could not register som GPIO expander LEDS");! A6 K% I, P+ b* o% Z5 h L
else
- J9 g: J# t& l2 h' V, x printk(KERN_INFO "LED register sucessful!\n");
; F% C2 M7 u4 J8 P6 r X6 [9 b) L4 I
return ret;
/ z0 Q0 G. v% p: ]1 [/ G}' H. v6 N# G; U4 D7 C4 }
9 @' B6 R( s7 h3 Z+ l# nstatic void __exit led_platform_exit(void)
8 j$ j. s: D4 K, h{
# E# ~# Q& q. u8 q$ m2 X' `5 n" y4 s% v platform_device_unregister(&da850_evm_tl_leds_device);& x( w. }' ]% z: M
1 O7 C% Z+ n9 P6 f \" N/ N& D+ ]
printk(KERN_INFO "LED unregister!\n");
$ |( q5 |' d, e$ K- g( t& x}; Z# g& O) _. P, W
: ^8 s. P3 X: q( l* J9 \3 }$ r
module_init(led_platform_init);
x( g4 ~% t; @$ l0 d6 tmodule_exit(led_platform_exit);! k# g; T4 m3 l$ `6 m0 {
1 J0 g! J5 c) {( E/ AMODULE_DESCRIPTION("Led platform driver");
) g3 d( W/ L. S, s, U d8 U- gMODULE_AUTHOR("Tronlong");! W4 p4 f; L( Y T
MODULE_LICENSE("GPL");9 m v9 p( B5 f' J
% }7 b* O) X! X+ d" F1 _
|
|