|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, i" o9 j0 V$ S8 Z, H# B
#include <linux/init.h>9 ?" H6 q9 |5 M( y
#include <linux/module.h>7 E$ n% T1 s* ^9 G
#include <linux/kernel.h>
3 N- W1 _/ O2 K& q. \3 _+ T# c#include <linux/types.h> S Y3 z% c" N3 R _$ s
#include <linux/gpio.h>
4 K ]' P+ ~2 g5 \" h7 N4 G% g4 r#include <linux/leds.h>
* Y- _3 f4 i; z( Q' Q L3 U, m#include <linux/platform_device.h>
4 n2 ?2 i7 q( C0 W" V
* N" r. f0 \! Y2 r- A#include <asm/mach-types.h>
9 |' X" p8 ?, {; D#include <asm/mach/arch.h>5 d4 ?1 ~/ @) G; O! B8 w
#include <mach/da8xx.h>3 @( w7 c; G/ T4 k7 q
#include <mach/mux.h>4 G8 D1 o3 Y2 A3 f( P3 {7 o9 T: Z J
- g p% K- U# ~* ]% T4 m#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! s' q/ ^9 x0 K#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 |; ]1 y, f; B; p#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# I) p! Z& K- H+ S h9 L: p+ q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
y& J& c, Z6 Z* Y8 t
; T+ a" @5 N! V/* assign the tl som board LED-GPIOs*/
7 r, ]7 ]8 |3 j! V8 E4 F% qstatic const short da850_evm_tl_user_led_pins[] = {
, L" K- |: S2 s- o$ @$ t9 E6 v /* These pins are definition at <mach/mux.h> file */
; c/ Q+ {% ~4 }5 y2 b9 x+ @+ O DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 p0 g9 Q" S3 B9 J) W0 E
-1
# w4 D2 H# W) q};
! Y) ~* n: S4 Z5 F) @
1 ]% R) s8 a) e" V# W: L2 Fstatic struct gpio_led da850_evm_tl_leds[] = {3 x' y! k0 g. Q8 x
{
1 H: H% ~$ V: z' b7 D .active_low = 0,8 A! q) U+ t& D( z
.gpio = DA850_USER_LED0,
5 B9 E. u D" O .name = "user_led0",. @1 f2 Y3 _& t
.default_trigger = "default-on",) C) q# I2 Y* O4 E, p
},
; ] I' d" N( K {( z/ \$ z: n1 L0 `1 M
.active_low = 0,# T: K/ j4 U" X- J2 D% n2 Y
.gpio = DA850_USER_LED1,. c# A+ h; W' Y- u' }6 Y1 O
.name = "user_led1",9 z0 Q! r" ?1 r
.default_trigger = "default-on",4 _& E7 m, L5 _4 f4 A2 H7 T+ V
},
: A6 V9 I% o1 |! { {
" e& J6 _& O3 Y5 p9 d0 G0 O' X .active_low = 0,0 N- N) _) I7 G
.gpio = DA850_USER_LED2,, W0 N' n( e' J2 _) M3 M5 I
.name = "user_led2",
" I! f4 c1 ?& \7 h* } .default_trigger = "default-on",4 b( G# b9 i- H% [; \: Y" R) O
},- Z% `4 P7 Y. [$ ^+ v! d7 M
{
& z; K& [1 ]: |) Y .active_low = 0,
. R1 W. F6 P+ h& N: J .gpio = DA850_USER_LED3,
& k! K6 _, T6 Q. a0 }; j# t .name = "user_led3",
; ~, w K* Z( K( | .default_trigger = "default-on",
* \( n0 N# }$ ?. S% a, v },
0 ]$ ?, ?6 e/ G& u};
6 E! h5 [) t; C
; q+ h9 G, m7 Cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' V5 q( s+ { P1 X: {' T
.leds = da850_evm_tl_leds,
6 a, Z, [. f$ B- A .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ ?$ ~9 g' U7 N7 R. a. Q' u. W: z};/ }: G8 V$ y9 V; s. U) W
" e: {( v8 U7 e! U" J; g# D7 Estatic void led_dev_release(struct device *dev)( M4 L3 K1 H2 x2 ]5 M2 i# u* N7 r
{4 Z6 J! o, g8 F! c' v
};
" ~0 r8 r9 E* e5 q8 v" z( C5 `( K4 I- E. H" C
static struct platform_device da850_evm_tl_leds_device = {
8 P; R* a6 j5 B6 }/ H .name = "leds-gpio",2 Y3 A4 w( o. i: @5 Z$ {
.id = 1,
6 H9 E! }* H8 E8 { .dev = {, J5 x4 f. ]2 k+ }. z, s
.platform_data = &da850_evm_tl_leds_pdata,
: E, j: b' |1 u) s& [7 X- ? .release = led_dev_release,& ]6 H1 K! ?% N; A( F; e
}5 b4 {/ x- n1 g+ J, ?4 D8 z
};
+ ?3 W @1 _: T; r+ b+ l1 q* C& u4 o: w0 x
static int __init led_platform_init(void)- @8 l# L D$ q6 g, ~; s
{# y0 m+ f, r) {$ o; Y1 Y; C; [
int ret;
. c8 P5 O8 F# G2 @* Z6 Y' t8 v#if 0
5 E; f2 `! ]% _ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. A8 b/ v3 k8 o7 t: z J
if (ret)
: P0 v2 w% r, f Y* V pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* d! _2 c/ g( u0 t7 D. @# v6 s, t5 i "%d\n", ret);
# n! m7 c/ G- n6 J#endif
9 M, }- K: |% u# @5 o- H ret = platform_device_register(&da850_evm_tl_leds_device);6 }; O& c8 X# n! _5 F0 R% N# e
if (ret) l* p# i) U: F
pr_warning("Could not register som GPIO expander LEDS");8 L- i9 P: j6 c
else/ C- N7 |1 S" J" c
printk(KERN_INFO "LED register sucessful!\n");$ \ Z' ~! {% X: ^3 C
; F4 U. r8 ]8 _0 S& o: @0 O7 e return ret;: ~) V9 U& a1 ]
}. W. R0 v- Z/ o ?5 D
7 }3 _% X# a3 e% Tstatic void __exit led_platform_exit(void)' Q' j1 C; C% E/ a1 Q8 B4 Q2 [
{3 C) h. F- |1 ] B H
platform_device_unregister(&da850_evm_tl_leds_device);
3 s5 z9 u( g% A7 ?* h, {) {
\ L+ p3 ?% y. q5 G printk(KERN_INFO "LED unregister!\n");1 }% ^0 U& O) {! x" m3 s- k
}
* p+ h% y& i% V- D+ A
8 |0 D8 s. e7 r( M; Q: e: o$ B" Dmodule_init(led_platform_init);( h. g7 g3 }$ ^* \' a0 z
module_exit(led_platform_exit);* ?5 m0 a" l' f2 R! ~' r q' v0 n
6 A0 S9 [1 @% b- M5 FMODULE_DESCRIPTION("Led platform driver");( n4 c+ q- g4 k& w k
MODULE_AUTHOR("Tronlong");
* [. T! S9 k( j8 IMODULE_LICENSE("GPL");" M; |8 r4 n" e1 z- h; A# F
" i# ^+ c4 o: I* C& C6 i; e7 f% ] |
|