|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 G5 `% _& G% u8 \#include <linux/init.h>
$ r( q5 Z0 g' I# V" l#include <linux/module.h>
; P! D) J. o/ r& Y3 a6 e5 s#include <linux/kernel.h>
" v6 F' s& x. q' _& V#include <linux/types.h>
2 v! A- H8 C! @# [* ?- X0 h#include <linux/gpio.h>
; k) P. `6 P! u% J3 h2 N l* K% a' ]4 ]#include <linux/leds.h># O( {8 a' {# q4 o+ |
#include <linux/platform_device.h>2 ]% R2 f: e" c, F8 I. b2 l8 L
6 x# @& p$ t _4 a/ h6 `" Z) p& k/ k
#include <asm/mach-types.h>
; o5 Q' y) T/ j1 e* J" x#include <asm/mach/arch.h>' W! n/ K# H+ \1 n
#include <mach/da8xx.h>" w- e/ N! H4 [2 r) ]+ }
#include <mach/mux.h>
, J# b. y) E% I" c
/ c2 v P. }: h- x1 }4 ^#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% a- S% E D: X! _8 t/ y, y3 }#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( R) | j% [. T0 ?#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- e- l8 F) C" g! S# E/ L. y; f& f, `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) Y6 w Y2 w/ K2 j$ I# ~9 K; {9 Q5 U& |3 D; f
/* assign the tl som board LED-GPIOs*/5 e! S* V4 k% |! \- R( L) U+ {
static const short da850_evm_tl_user_led_pins[] = {: u8 n) B" n7 {7 y+ Z
/* These pins are definition at <mach/mux.h> file */
9 o. N1 k: t* Q+ {9 h2 B! E+ u DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# U' [7 J2 T6 c; u5 G
-1% M/ r% y3 V: C, X+ l% @7 m& F. F
};/ k; h$ K0 ~3 I/ f# p$ @' O) |
1 G! U, ^0 Y: P( m# V& Pstatic struct gpio_led da850_evm_tl_leds[] = {9 M- D- z( o4 M, _ @9 j7 g) P
{
' \: d3 B4 c. Y0 X* r K8 H- t+ q .active_low = 0,
$ n6 a8 ~/ ~& D& x5 `- C .gpio = DA850_USER_LED0,
- B# {/ Q2 K! l9 [3 k .name = "user_led0",
! m' K- u' z2 U$ z( O; r .default_trigger = "default-on",
5 W/ e% v' H, k( W* c1 V' L! X1 N },
/ A! x* m8 K8 h9 ?) C" f7 b4 V3 U {; j2 _, s/ K1 ]: Q6 a: E1 o
.active_low = 0,4 W3 q" H, y* i1 _' T, N
.gpio = DA850_USER_LED1,2 {3 u4 ?; X8 o) m: r
.name = "user_led1",0 [: ` m/ o: Q5 j
.default_trigger = "default-on",
1 l& J% g0 O7 y },
# W: Q7 x1 Q7 o4 f- ]9 ] {, e; _: X# \& X7 c
.active_low = 0,6 f# q( Y' z# H* b6 u/ J+ E( M/ X
.gpio = DA850_USER_LED2,3 T/ Q' A' l7 J$ ?- d
.name = "user_led2",* f# M7 S# f. h+ a4 N/ M: V
.default_trigger = "default-on",
" C$ h7 Y0 H1 U% e& @, Y },+ @' R7 ?- W! p: @" F& k
{
& N" Z/ `9 Y1 @" K- X" a6 Z' A .active_low = 0,6 I2 c( B% \: x, h7 a; I
.gpio = DA850_USER_LED3,2 {) N/ L. N& G6 \4 {
.name = "user_led3",
, {& ~' p* s4 `7 J .default_trigger = "default-on",( K4 f2 D1 D: T
},' h+ h C1 H8 [
};4 y- D: j9 m9 D) X
U3 X, U; ^, @: ^1 Z' Y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: _3 v7 T# r/ R! s) m .leds = da850_evm_tl_leds,
, k6 A) L8 H# l; x8 ?( } .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 \8 s3 ]/ L$ u};, s6 }' v8 k( j& R
7 w y- k Z5 e3 p$ c
static void led_dev_release(struct device *dev)
. I( ]" W' o2 G$ m6 C{
; r. _* i9 {* A# ^};( [. [/ _) M* F
8 I3 O& X/ {$ M" K- m fstatic struct platform_device da850_evm_tl_leds_device = {
$ R( W4 F% v# m' M% G. }5 S .name = "leds-gpio",
. [1 ?4 ]6 G X .id = 1,6 |/ s/ k+ W) @: D
.dev = {9 E3 {8 p. o: G! _6 g; q5 \3 l
.platform_data = &da850_evm_tl_leds_pdata,
6 K+ A$ B2 |1 ? V! L+ h/ Z. R .release = led_dev_release,
: h! W) a- N. n a5 c2 @6 N8 b- c1 O }& c0 s8 }5 g$ d- K' m1 {( H
};
0 j8 c3 R' Q+ m, Q
) B* B! Q% S# }. F- n% u- Vstatic int __init led_platform_init(void)
/ `8 K" \- Z) x{
' f: d% Z7 z* _1 P int ret;
% a* q5 F" Q3 N6 ^# ~#if 0
* B" A; c) W6 l5 C$ r% v ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- l% X2 v" B1 P( u
if (ret)
# e; F4 a, f7 @+ X6 K pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 W+ p5 V1 Y% k/ g
"%d\n", ret);
, l0 ?; @7 c0 Q1 K#endif3 g% E6 T l4 B5 h
ret = platform_device_register(&da850_evm_tl_leds_device);
8 X. o: a$ } X4 y) a if (ret)( Q7 q8 g9 K4 q( ~. q, B
pr_warning("Could not register som GPIO expander LEDS");
0 O( P* j1 [- j' i$ M$ Q1 @9 R2 C else4 N t z! A4 b6 z( B! ?
printk(KERN_INFO "LED register sucessful!\n");
- L/ y$ D* E8 Q7 V& q, A g7 C/ s5 h! r( ]* R$ F
return ret;
. @- u) h& I1 W9 P! t}
. |/ g' Q, c, G: ?
8 Q/ f( L9 `3 T) G! l1 \8 Jstatic void __exit led_platform_exit(void)* a% N# b/ e) o/ w" `. w/ r, G+ n
{
1 O7 w4 v/ z+ w- U ^ platform_device_unregister(&da850_evm_tl_leds_device);6 Z; x3 _0 P# Z$ ]
( z1 G8 Y y2 _% t
printk(KERN_INFO "LED unregister!\n");" |& y1 t/ @$ ?! m
}% z! J. G3 W$ v3 p, s" W2 b( t
' v$ D) U1 O7 G5 S
module_init(led_platform_init);
) x! T; \9 S cmodule_exit(led_platform_exit);8 _7 _& Z: Q( k& R& W; g" K
' ^. u( Y' r0 e2 H
MODULE_DESCRIPTION("Led platform driver");. r* I$ U- |+ H- i- r
MODULE_AUTHOR("Tronlong");
7 p/ ?! z8 b, v! \5 dMODULE_LICENSE("GPL");
9 ^+ u% ?7 j; |! K6 `
( O8 }. f+ z: g# _, c" w9 `( y |
|