|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 ]( ]4 j5 F' x) g4 V; p
#include <linux/init.h>
/ y" @( V' e! h#include <linux/module.h>
& S' K9 x( G" Q. j#include <linux/kernel.h>
1 y1 j$ ]/ [ B2 K* ?#include <linux/types.h>2 s! ]; S$ u* a! c9 i8 b! p, N
#include <linux/gpio.h>$ A: s( U( T) u' R2 m, D; g
#include <linux/leds.h>- q; Y+ X4 `( Q* _& ^! ^
#include <linux/platform_device.h>3 o4 q9 S6 }3 D1 H) b5 W
5 O5 ^1 N* J* y#include <asm/mach-types.h>
' l+ X: w- _8 [+ s7 b4 \8 t% l#include <asm/mach/arch.h>
7 x/ g6 U2 Q+ t$ U#include <mach/da8xx.h>
$ \; L* S! @/ _+ }* S3 s2 |#include <mach/mux.h>( R& {0 N ]9 O- R
. _8 ]; M S: y4 D
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ p3 C- ]+ L' t$ k
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); W3 `) e9 V' p Q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 v, R3 P2 U( O! N2 l5 H' \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! G5 d" t) U1 B' F, l
7 ^+ G% l6 S. l4 y5 K/ w. C/* assign the tl som board LED-GPIOs*/
' Y6 `4 `! X' G1 hstatic const short da850_evm_tl_user_led_pins[] = {4 N9 `+ f6 W: ^: }3 V
/* These pins are definition at <mach/mux.h> file */1 ~; Q- |$ i0 f/ D, y- H
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 K9 ?2 _; x0 _& h. L. j -1
1 Q. g2 u# c0 _8 ^! I};
% I) h- c' M& |) Q8 j
0 h0 W# D$ A4 X! }. @% Q" Tstatic struct gpio_led da850_evm_tl_leds[] = {
8 T2 |5 D- v: O9 D, c { V3 {, _1 F% w! x6 C
.active_low = 0,+ H: H7 V$ X4 I4 t1 \
.gpio = DA850_USER_LED0,' R- h9 u+ A# C0 v) b, J+ _# p! t+ f" Z
.name = "user_led0",! \1 Z- h: m/ X( |; M2 C
.default_trigger = "default-on",' J8 N& ?% e; g2 V4 `9 ?9 v
},
- U' v8 U9 R! Y+ d2 b" \& D {" r+ L$ `& y8 s' R
.active_low = 0,
6 g2 J# W8 [( c+ B( P B .gpio = DA850_USER_LED1,8 O- \& i, d/ F# Q& O1 ~
.name = "user_led1",
- {8 m8 |3 u' ]1 T/ q( p .default_trigger = "default-on",
7 T0 ]" x, [3 {- R) g! J" w }, n( O8 y1 S, @6 L1 B M
{2 h! t; p+ \1 P9 v: H4 ^
.active_low = 0,
' Z+ M+ [8 [+ ?, z .gpio = DA850_USER_LED2,
1 D. d8 e5 b# y* s# b7 o .name = "user_led2", Z1 k( {/ @3 t, {3 \
.default_trigger = "default-on",
5 h% i) q: G, K" ]! F, n },% @, F0 ?- j2 f
{" b$ }( t% n8 h2 N
.active_low = 0,
, G1 J: w; C4 b7 ^8 M9 e .gpio = DA850_USER_LED3,8 F0 b/ z) ^& }( s# T7 u# D
.name = "user_led3",
9 n; D; @; T5 K .default_trigger = "default-on",
0 Y: |: Z1 g1 M! m }, ~3 M( p7 N( P- a/ \6 M/ m
};
9 k" [& W4 c0 A1 U% B) u4 q
% K$ G3 D! `$ }- G) S5 Qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ B* `1 U* @! W! q) Y
.leds = da850_evm_tl_leds,2 a8 Y$ i6 a4 C9 ^7 P
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),' D& d5 g( ^7 k, l6 f( e3 H% Y
};
. k3 \1 F" k; O8 N5 s( _& r- [2 p; Q
static void led_dev_release(struct device *dev)
$ f* W; h' J; L" x; L+ }3 r0 D& b* l* j$ _{
, k% o6 A# D' B7 e};
7 u O% Q3 n& {, f* Q$ j1 Z+ g8 W, i1 Y y8 w" F
static struct platform_device da850_evm_tl_leds_device = {1 d5 k: [) F7 W' }6 c, V
.name = "leds-gpio",
7 e7 r6 j8 I. `) \& _ .id = 1,7 Z' S! V7 ~% S( `5 Q7 [- c: I
.dev = {
6 b0 O4 d* h0 B; m .platform_data = &da850_evm_tl_leds_pdata,
. g9 t1 Z& ]( M L) I+ X2 O1 I& s .release = led_dev_release,3 F8 t1 P# n6 O7 A
}+ K8 b6 I! B b; D5 {6 |
};
! u" E3 p* z8 U" M( U' J
; ]' c2 t' G4 A) |static int __init led_platform_init(void)* ]( G) Y3 O; l5 Q+ V" |
{# W5 O$ Q' ?. F, K4 ^6 K
int ret;1 O9 U: V2 Z7 n& S c
#if 0, u$ M. j [- ^* \ p+ U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) _& K# D- j; S. |% Q" I W if (ret)
% r; y+ h! p) w4 p4 U2 `0 n9 j pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ K1 }4 z. P8 M- y8 M
"%d\n", ret);8 P: ~+ n" z: c7 |
#endif- O& p/ F0 j6 P
ret = platform_device_register(&da850_evm_tl_leds_device);
: N$ r4 v0 U$ q/ Q+ \. N! D if (ret)8 T3 _* Y4 \; ?! Q5 w
pr_warning("Could not register som GPIO expander LEDS");
- _" v! D7 G4 q: S$ i. T' D8 q: E else
) }6 K' A- y9 _% R( R0 ?7 ?( X printk(KERN_INFO "LED register sucessful!\n");4 K/ t6 Z! D3 j* q' D
" I( b. ~$ ^% d7 W
return ret;
! [7 [1 i) E% ]" S K. f}
8 m( A6 _* ]* }5 V, ~8 m! x2 W+ P; N7 b1 o0 z
static void __exit led_platform_exit(void) }6 Z! j& J- Q& ?% k
{
* W+ N! Y& V" z4 A0 V# U/ g platform_device_unregister(&da850_evm_tl_leds_device);) i! [6 F' m) v& r+ r s7 K
+ ]- ]# Y8 E2 `2 i! \) Q0 ]* y8 H printk(KERN_INFO "LED unregister!\n");
: i: X2 B' ^9 S9 H$ z0 A/ L! r}
3 [8 H$ x# p+ e0 Q
# Q' ?: P# G4 l7 bmodule_init(led_platform_init);, [1 n, p4 ^6 }- H
module_exit(led_platform_exit);, g- b4 ~$ S/ F0 _- f
( T6 c7 _$ ?- v8 J( v9 G0 C- Y+ mMODULE_DESCRIPTION("Led platform driver");
6 z8 I/ H. `* D: N0 ~MODULE_AUTHOR("Tronlong");
) `, U# s$ h4 r% nMODULE_LICENSE("GPL");3 }% O* `, W4 Y. d+ Z' j/ [
0 j8 e0 ]9 N5 n# Z7 j! i |
|