|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# m1 ^ V6 G1 Y$ _/ }+ L#include <linux/init.h>
8 y. ?! l7 Y1 c$ U3 D4 t: V0 e1 z#include <linux/module.h>( ?8 G i% y+ ?
#include <linux/kernel.h>$ g$ m' s! a. V' S6 o& s$ ?' P/ m
#include <linux/types.h>
4 O5 h( c# I' x$ [5 t#include <linux/gpio.h>
' h+ o. v: Z- @8 e' ]9 Y: j#include <linux/leds.h>! g4 [4 V7 S$ V7 B3 b g7 L! n
#include <linux/platform_device.h>+ {4 X' I7 j0 L4 a) O
& y Z* Y& a/ U& W" t6 G" k( ?
#include <asm/mach-types.h>
0 J- ]+ w% j t* h s0 L#include <asm/mach/arch.h>! W: _3 a$ B# }/ _; V/ c# s# S4 P
#include <mach/da8xx.h>4 Q4 l- R# ]3 Z: {4 ~9 ~
#include <mach/mux.h>8 z( B7 y& k) u6 F
- K7 R& J# g% d! d3 Y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) A# U, n) u4 R9 U5 ~: \" g
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# A6 z1 e: }. Y' [% [) q7 g#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 R5 N" e. A' X4 t/ R* P1 Z6 }2 ^#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 H4 o- P z, F3 `2 c4 O, x' L
C7 Z' r5 D+ v( V( O& X6 y, ^
/* assign the tl som board LED-GPIOs*/' e9 s3 u/ J, r; ]2 p
static const short da850_evm_tl_user_led_pins[] = {( m7 H) |3 N; O7 I) z3 Y
/* These pins are definition at <mach/mux.h> file */
% y, S, j9 M$ i# ~& B5 t* @# Q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( n/ N; M% ]* d -1# r0 c. @4 F3 T( ?8 }* [ [/ U* h
};
" j! s! P: S) r, D$ L" R; u
/ Z7 n$ f/ @ V2 F. `1 ]4 Pstatic struct gpio_led da850_evm_tl_leds[] = {
' {, w4 s, N6 O/ C" V {. ~9 u, r$ D1 D6 P6 l) E
.active_low = 0,) d* Y/ B5 Z) e, T
.gpio = DA850_USER_LED0,
. q* I# M, X- G0 e2 {1 k3 R .name = "user_led0",- ~' @) d* f1 \
.default_trigger = "default-on",
, Z) A5 ?6 @( E! T },% T( _6 ^2 h9 t( `
{
$ d0 _5 l \' E3 k) y1 M1 C/ } .active_low = 0,6 a) Z# |; ^" [$ }
.gpio = DA850_USER_LED1,7 \4 ]3 Q! s1 m! }* ] L
.name = "user_led1",
6 d" K" t6 [! ?+ Y$ t. y* I2 \ .default_trigger = "default-on",
+ \" ^/ l8 t' E/ h },
/ ~. Y. E3 ]* y0 N8 ^0 e% s$ ~ {$ Y3 k/ k: X" B
.active_low = 0,, d/ h' P( V* n6 r. t
.gpio = DA850_USER_LED2,
: {9 Y" G: A- ` .name = "user_led2",; a) y; h3 i g( s! y
.default_trigger = "default-on",
& M! I9 I! [2 P/ S9 p },2 }8 \1 l, S* w2 S, i
{
. ?3 s6 c! S+ \# c' d .active_low = 0,3 t! u9 x: u0 V6 K) K% N l
.gpio = DA850_USER_LED3,6 W: ?7 a+ I9 u5 G: I5 K0 L
.name = "user_led3",
e5 W8 l' h. R+ m3 r% s6 T .default_trigger = "default-on",* j: q/ _9 `) s: v: S' @5 I
},8 L$ x7 `2 a: f/ z+ `
};
- L$ p: h1 d [3 Q5 r, l2 ~3 x' P
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; e1 K- g0 ~0 S .leds = da850_evm_tl_leds,% k& h1 B' L, I& w4 g' ~
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 \# u2 V# x- r( h};
7 E' p' o7 @$ O n$ I4 f( q$ J0 x: ~; |2 L) h" x* F ~4 h
static void led_dev_release(struct device *dev)1 @0 x* H# [) x/ q3 B+ N
{) \, j9 c, F, O* H
};7 h( {( e3 `; c& j3 s, \ H
9 ?% Z4 I) ?8 L' I* V' m; kstatic struct platform_device da850_evm_tl_leds_device = {5 o1 {2 W4 d: [+ e. j# k& N
.name = "leds-gpio",; R9 R; p) ~) `( z$ R
.id = 1,
' O& s9 M) F, \4 s .dev = {
# N( g. k/ J0 ? X4 ` .platform_data = &da850_evm_tl_leds_pdata,
7 @1 Z9 @9 V- L; r .release = led_dev_release,; L. q6 \3 f( j: l$ \
}
7 v( ]' r6 A' x$ a};8 `; ?4 R. E6 ?! }. }& \0 P/ ]
1 O9 A. e8 D4 X4 D6 _8 S
static int __init led_platform_init(void) \ |, f. E( k. B8 t
{
( R2 ?) `7 ], y5 b% R int ret;- x" H/ x) a: L1 `0 P
#if 0
0 ?* v: F& Z/ o7 _: o9 V( d ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% n$ E0 d, f0 c- _8 } if (ret)
+ l2 U" J- F* F! [ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ o9 U4 E6 D) E( _
"%d\n", ret);, Z- Y( i; m0 _! Q5 E; ]
#endif
3 L* A( u) A0 F& Z" c+ v* M' B ret = platform_device_register(&da850_evm_tl_leds_device);5 [ a5 ~! p$ W" L
if (ret)8 F! ^* m$ t* B j: B
pr_warning("Could not register som GPIO expander LEDS");( I# h- P( a; _: n2 @
else" x: E" C9 H/ q
printk(KERN_INFO "LED register sucessful!\n");! T. p7 _4 ~/ p( X; d% D
7 V" Q! {. @1 }( a+ B( g- V return ret;# G$ k# v$ Y# {* ?' p# y
}
$ j' F& V k9 p+ O3 A% f6 q% }& v! X% u. ]
static void __exit led_platform_exit(void)
9 q' ]3 M/ T) u6 J; q/ A, }# m# x{, h) {) { @/ t) M
platform_device_unregister(&da850_evm_tl_leds_device);: G) o6 D9 }0 s$ j1 G; j$ a
) }5 d( K& a# \ printk(KERN_INFO "LED unregister!\n");
+ `9 r; `4 C; C+ i}
7 Z) N9 }& ?, J4 d6 X. J M, y' l* t" ?3 ~
module_init(led_platform_init);
! f( h5 A' W4 }% m) mmodule_exit(led_platform_exit);5 G% {: z- J/ I- h9 A
9 [+ a6 I" ]4 ^$ u! w& E J1 D8 X6 Q' _MODULE_DESCRIPTION("Led platform driver");
2 B# ]1 Y+ v. G+ ~MODULE_AUTHOR("Tronlong");, k \, d! c( W+ Z: d2 P
MODULE_LICENSE("GPL");8 L4 a# |5 [$ l$ k+ n0 E9 w
% \9 s) L) m8 f) y |
|