|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" w% o3 }7 d' i8 `#include <linux/init.h>
7 {1 [8 o) G' t2 ~& A' H2 u6 }# z: M+ N#include <linux/module.h>/ ^- x/ u5 D$ k# H2 L: B# Z( z
#include <linux/kernel.h>/ b3 O+ Q$ p' G
#include <linux/types.h>
- l( i5 ^( [. |5 W3 B" V4 |1 F#include <linux/gpio.h>! I& U; b7 M8 R- k
#include <linux/leds.h>
9 L. z9 T. d* t8 O# E* e, x! v#include <linux/platform_device.h>
8 j6 m2 Y5 V4 P! P# S8 ^+ @+ i
6 x3 b0 V( g/ p! H- e( |#include <asm/mach-types.h>! \ u% J6 {+ }/ y! `' \
#include <asm/mach/arch.h>( L6 M# b. }$ o9 w: Z. d9 V1 h
#include <mach/da8xx.h>
% U9 T' W/ e9 G; A6 o% Q& l#include <mach/mux.h>: r; E$ E7 f8 H8 [
5 z) v8 o. q( t4 _8 r# U
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# e ?" B2 g' D% V6 }1 e
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# \/ @/ Q+ ~! C' Y9 l {#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- ~* L) C$ ?2 g0 X U
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" U2 M) G' Y1 Z& d; `% x) n$ B
3 ^$ H- `: x2 }5 E& _/* assign the tl som board LED-GPIOs*/# `; g; i1 a# b* ~) H
static const short da850_evm_tl_user_led_pins[] = {
- O) Y' |2 X" W /* These pins are definition at <mach/mux.h> file */
0 k( h9 G' |/ u* e DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ h/ v" Y; n1 {/ O t( g
-1
M7 A2 V* ^( r};
# K! K2 X$ k# o9 |0 N9 b, {% j9 C% K9 ?; y
static struct gpio_led da850_evm_tl_leds[] = {
# g( g& Y. D' P: v% s/ h {7 k& l# c0 t; j6 s0 K, F
.active_low = 0,
/ a9 c# |1 c! r4 |2 R .gpio = DA850_USER_LED0,. o$ a% C' Y2 i ?5 C4 ~; V
.name = "user_led0",
, d! d" y1 C& d2 q .default_trigger = "default-on",. Y; ^: \; n$ l+ i
},. d, }" l. d: S, G$ u) K
{
. i% t3 U* L# p6 z0 |7 C0 ? .active_low = 0,
0 b5 P& {2 M9 S1 E% Z .gpio = DA850_USER_LED1,% j: m# D& O% E1 P2 i
.name = "user_led1",
" y5 M8 o5 K* x' l" \3 o% [4 V' X" U" D .default_trigger = "default-on",3 Q4 z( ^/ l+ a% M# i8 y7 l
},
$ h( D+ f- f7 C% r& n9 M {
$ ~* U( m5 O( e" V. m1 u1 |+ u# Z .active_low = 0,, G* S: Q l/ b3 h+ S2 W
.gpio = DA850_USER_LED2,
, ^9 P4 M, A; W* W! w) T6 ` .name = "user_led2",- O P, H1 K, V
.default_trigger = "default-on",
) D% ~) A7 J, g- h },
: V2 S8 x; z ^, ~ L V {: D' k8 O, r: d8 O/ A# A: ^0 v
.active_low = 0,
% F+ c4 [/ Q$ k4 O$ n .gpio = DA850_USER_LED3,( D/ x% X( Z+ }
.name = "user_led3",) a* N |- |7 `% U. b, T. G
.default_trigger = "default-on",$ W( M3 K4 t3 G( U4 x
}, v- x; S# |9 [6 a
};
' b) n/ b0 L/ }! [1 l$ b& C- V' k5 x( a$ s, R9 B
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 A! g6 S! d8 C% `5 e3 {( p .leds = da850_evm_tl_leds,+ w8 i, u9 y3 G! y' g
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 R; ^5 m$ C3 x6 `2 }' m};5 t# k* Z9 j! I. U5 J) @! p
5 l( ?: d$ t% {% {0 F5 u
static void led_dev_release(struct device *dev)$ ~, s, K8 X7 q* _
{% { c- E) |/ Q. q8 b
};! g: u" c& P0 B& e* B
+ }% m) U5 F( e/ h$ a' `8 s
static struct platform_device da850_evm_tl_leds_device = {
K7 K6 @% Y6 Z .name = "leds-gpio",
; S' T+ O5 d9 z: b# Q .id = 1,) ?" p$ @, R/ ?# G5 U/ T9 `
.dev = {6 ~, m2 [: @+ a
.platform_data = &da850_evm_tl_leds_pdata,( }' U* ? Y3 \( [( `0 \1 {. u
.release = led_dev_release,) H" [( Z; k) E9 r* X
}
8 |/ `% r/ O( t! o4 P, c};+ l: X7 r4 G2 v5 w
5 K" m) v( B' B, a4 pstatic int __init led_platform_init(void)* G! P3 c8 L" _+ E; h8 s6 l" e: m
{0 U/ k/ W( _. U$ Q! |' B
int ret;9 D' P" t9 b; g2 L2 a0 C" Y
#if 0
+ x& ~2 Y8 W/ m7 t$ } ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 l$ s( l1 K( {; T
if (ret)+ r; N* \/ x# w
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: h1 T9 _: p+ `: R* b' f H "%d\n", ret);/ S- f z, d' q! N) S( I# U
#endif4 h8 L: S8 p$ V9 q9 p/ W3 v0 y
ret = platform_device_register(&da850_evm_tl_leds_device);4 M! Z7 M% E5 X) N. v+ Y9 d
if (ret)% n: c* b! V( u: H- j& r! x
pr_warning("Could not register som GPIO expander LEDS");5 w+ Z- |( o5 o7 |: s _
else
' ?; A" N% j9 Q4 h: u! u& x$ f0 b printk(KERN_INFO "LED register sucessful!\n");
q) R; n3 r, y: X7 U1 H9 p+ L4 T) n9 }, o$ ?' {
return ret;( E9 y3 e5 h, [1 n
}
- i: u; g6 z: M9 _/ y p8 ^6 V0 l) F# J" N
static void __exit led_platform_exit(void)
) x) h8 H8 p! e3 P0 R% @( @% _{# E! b8 c) w" ?! n
platform_device_unregister(&da850_evm_tl_leds_device);1 z. @1 g: |; X0 N0 `. F! I
5 L% C9 z% q; x- ?2 n! `$ H printk(KERN_INFO "LED unregister!\n");
6 P3 y( m1 f* v8 I7 o3 L}4 U7 C. C% `6 z/ P, m
7 _( E7 x0 [2 N$ i9 x& [3 W' B
module_init(led_platform_init); x# U1 A. E; x
module_exit(led_platform_exit);: `- A6 a: B6 B4 Y! L
$ x( f, T! \; e( U, [
MODULE_DESCRIPTION("Led platform driver");
4 e L" i9 ?+ i1 o4 vMODULE_AUTHOR("Tronlong");
/ @! {1 }5 u4 |' x4 q# ZMODULE_LICENSE("GPL");
- ~2 r4 u" c/ r6 K& C: a# T2 \6 w9 e$ K8 p/ L* S
|
|