|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 Q2 `& W5 [( x/ ~5 s. ^( L8 J#include <linux/init.h>( `: Y0 }$ S5 Q0 X
#include <linux/module.h>
, z; L0 \0 y4 q+ Q& K: d#include <linux/kernel.h>
* T: L; k+ \( E, O#include <linux/types.h>$ ~/ C. x' j6 I$ }( s0 V% _3 P
#include <linux/gpio.h># ^' r) d2 Z: i
#include <linux/leds.h> x/ R+ X' ~9 N; L
#include <linux/platform_device.h>
8 f L! n0 n0 p* @, G; v1 W) O( ~5 f: d
#include <asm/mach-types.h>
3 o: o J4 S; p# W; ^5 A, K#include <asm/mach/arch.h>
( ]! c# V( |0 j7 e+ E7 y- N6 g#include <mach/da8xx.h>% J4 Y! _* C5 x, w, g
#include <mach/mux.h>/ F' t7 r' G+ t; c1 a. } E& [
( r. I' E% p/ s. ~
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 u% B1 _* j# o0 Z4 q3 P' j
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! r8 P8 b# g: @
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- R! b" J/ U, ?$ {2 R6 c. |/ ~
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 [% j2 @" \+ X* M$ Y6 M$ G$ Z* T/ b+ s
/* assign the tl som board LED-GPIOs*/
) t' c: f7 G. J# h/ r8 fstatic const short da850_evm_tl_user_led_pins[] = {
" ?7 w& F8 V; ?3 p/ {# ~ N7 m. C /* These pins are definition at <mach/mux.h> file */
8 w$ e/ v# @8 u% U/ Z! b- h9 ^- I3 F DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," u7 f# h7 B+ I, z5 h; P1 {9 p4 d
-16 k, T% x( ]& \) D
};; ^* b6 o' P% i) k7 M4 r
; G1 _$ s" I7 ?' V! \# j% `+ Q4 E8 B3 Sstatic struct gpio_led da850_evm_tl_leds[] = { l# R6 n; I c+ k
{
- u6 z& X+ f- _, |& I; Z .active_low = 0,
/ l# ?! n- l' A1 S- m .gpio = DA850_USER_LED0,* S0 {: k2 D. X
.name = "user_led0",2 }5 W" i- J% s5 u$ k5 ~ @
.default_trigger = "default-on",
, E* i* t, ]6 v* n },
5 I2 g7 s8 k# s. L v {$ j5 ~! b R3 {5 ^& C6 P2 ]
.active_low = 0,
2 w+ ~+ O6 c" `) L4 }$ ? .gpio = DA850_USER_LED1,- `9 L( W7 [2 _' ?
.name = "user_led1",
; [, r. \7 ]% c% V" T8 n: ?3 | .default_trigger = "default-on",0 {& Y6 s* [3 `4 ^' ]
},( {9 R. e2 k% \- k, V4 ]9 y; J
{
9 H( d9 f' b& ~0 B .active_low = 0,
, @* }$ C2 M+ Z; c& T; W! z- _& l .gpio = DA850_USER_LED2, I( A6 I- K( u2 f" Y
.name = "user_led2",
) O' _$ T1 L# L2 s0 {8 v, C, H .default_trigger = "default-on",
* J* _3 h* Z% {% y& ] },2 p% w3 Y3 m0 B
{. \ F# M+ i" ~( h
.active_low = 0,
" L( G) F! J) }) w# z! W .gpio = DA850_USER_LED3,5 X& m. F1 d3 `; ?" K9 S7 `7 k
.name = "user_led3",
6 h2 W: @/ X% T, S( H+ t2 k, q .default_trigger = "default-on",7 u! \& a+ ]+ I- h7 `& K% i5 e4 Y- C
},
' N- M6 Z% ]7 e1 |7 H};
7 |, w$ f2 q' _6 y( u% a; {
2 r9 ]' n0 \! y/ h: a& L' tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& B8 z0 K: F$ L6 n; h .leds = da850_evm_tl_leds,% q5 k; o& @1 R! r
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" C0 K- q$ t' T _};
4 Z: P1 j5 x6 G9 R. W& ?9 p+ x/ j9 h0 [" }3 b `
static void led_dev_release(struct device *dev)
# _0 s, H |! H4 o{+ o2 \- q9 O8 L, ?7 M* S" z3 k3 k) ~
};# ^! t" a$ x( ^0 l. s/ a# z) z
# U, f9 `( @% L) o z% Cstatic struct platform_device da850_evm_tl_leds_device = {- e6 U3 ]' @4 Y3 }' u
.name = "leds-gpio",1 _: K9 R# k: i" r T# v
.id = 1,/ j: r: N, K+ i6 p* C2 S
.dev = {2 q( P- s/ }- ]
.platform_data = &da850_evm_tl_leds_pdata,$ T# G# u7 \% S, L
.release = led_dev_release,
, d3 e$ N0 ]3 M }9 q/ S5 k$ D: Q0 Q
};
1 r5 N$ L2 h& X7 e$ s7 d, W% `9 Z* G4 Z8 {$ T* c
static int __init led_platform_init(void)
$ f( p. w% T, l2 l% \5 L7 p t{
4 `* |0 M+ a( V int ret;
; s3 e2 U& ~( X#if 0
) }- l, G6 O6 u: o* @0 N- Z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 {* h; l; S% ~) @ if (ret)5 R. g: U" J1 }
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- x5 t( [1 h9 _. N' c" ^ "%d\n", ret);
. _) Q& S9 k, h& x1 g#endif/ D& L, ` Y- l9 P7 u4 _- x
ret = platform_device_register(&da850_evm_tl_leds_device);
( R$ W) H* M7 o4 e5 u& y- Z if (ret)0 U1 N& s; r& b) R' s) \
pr_warning("Could not register som GPIO expander LEDS");
* G! X2 d! P$ T* n2 S b' V else6 Z5 Y6 U3 P/ I9 t( P
printk(KERN_INFO "LED register sucessful!\n");
a7 o% [+ V3 q# C
# B$ @( F. S5 A" b) Q# C return ret;
* E9 j# n- n" x7 g: N$ P}
" ?0 [5 M" T1 S' H. E+ F! B0 K
& q, v2 ~+ M$ }7 y8 B) v- A0 Y. nstatic void __exit led_platform_exit(void)) ^ E: _4 w8 n* O- \6 [! `/ \
{, o; |4 m1 _2 o; x: i9 A
platform_device_unregister(&da850_evm_tl_leds_device);! \9 b/ a( t, N* o: x; g
6 ]* d( _; }+ v) m1 [+ Z
printk(KERN_INFO "LED unregister!\n");
1 O& }: j2 M( x& H: B7 N}1 i9 D; B( g7 B! } f' ~
" w& h! N2 M5 Z$ J, `1 @module_init(led_platform_init);, V8 ?$ E4 L! Y% i) B
module_exit(led_platform_exit);
x6 s8 Y9 m: Q2 }$ }. T( g; t. F1 ^# [7 c5 Q" [% t( G
MODULE_DESCRIPTION("Led platform driver");
( t; X G; X; q( WMODULE_AUTHOR("Tronlong");+ u: l( g, ~5 C: x
MODULE_LICENSE("GPL");
5 U$ |+ |3 e N# M3 z
( o* p& N2 K1 ^. L |
|