|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 ^& a% ~) G3 Y" l. E( w Z7 ~#include <linux/init.h>
( t, O' i1 A" ~* U, j, p' i8 h#include <linux/module.h>3 ?" p% z9 r0 i$ X9 [
#include <linux/kernel.h>, y* D4 b: ~, |1 s
#include <linux/types.h>
/ C9 r6 M1 O5 Z; i3 u#include <linux/gpio.h>: f& W1 C1 ^+ u0 x# M
#include <linux/leds.h> D- A( }) q& G9 z9 J7 U
#include <linux/platform_device.h>
% X9 S+ S) |& B. P3 p u3 X
& |8 s F/ T7 X D+ a3 c#include <asm/mach-types.h>* t6 `/ }! B+ e- l( |
#include <asm/mach/arch.h>
6 r7 L+ S+ [1 R#include <mach/da8xx.h>
2 j2 ~9 L) i9 M. R#include <mach/mux.h>
) T1 W! L' o/ k5 s$ M6 e& e2 t$ b* ?% @2 P6 f* X
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); D- y3 q" D% K* j
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 I3 B$ U* p, x; k3 l# u4 v
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) s4 |7 D# |- Q- I' L
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ ^: I! F" _+ G+ z5 e. j/ z. h
) H9 w8 u. ?" m0 H# j) z3 t/* assign the tl som board LED-GPIOs*/
D# A0 a% }& |8 Z6 F+ ], U2 xstatic const short da850_evm_tl_user_led_pins[] = {
' w2 p( @' \4 G /* These pins are definition at <mach/mux.h> file */! Z" J6 N5 f" {2 w, M5 P" Q; q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 |6 ~% B' g1 n5 M1 D
-1' M& l, o2 n; ?5 t
};4 Q b- n: P; T( t, |2 @
( ~4 Q" O/ p' J% B0 z
static struct gpio_led da850_evm_tl_leds[] = {( b w' u1 q6 n4 j9 k. f
{
% Y2 C( n+ g' f+ \" k .active_low = 0,
7 Y$ q% }" X$ t# a .gpio = DA850_USER_LED0," |$ h/ |+ W" m7 H" f) W, \
.name = "user_led0",5 q% i" h: ~+ n8 f* O- w: _9 q% ?3 H
.default_trigger = "default-on",0 R4 j8 O1 `$ S P* {
},6 R6 W) _! q1 }$ V
{4 m0 o" p+ O) }3 _
.active_low = 0,
+ o: I& [' l) `$ Z .gpio = DA850_USER_LED1,
* g" `- s/ V6 T) Z& g .name = "user_led1",! X' F9 g! }- T
.default_trigger = "default-on",- |$ a3 ?" N3 z3 v8 t& B' d
},) i+ x7 {2 V6 z6 n6 ^: a( F
{ }9 \2 m# K7 }' r
.active_low = 0,! f* l+ ]9 c' g, V' b% G. E
.gpio = DA850_USER_LED2,& ~. A; \( s J7 D% p
.name = "user_led2",6 h0 W, `1 o" r" x1 d7 V! v
.default_trigger = "default-on",) K# t8 D4 ]! a: F8 k4 b
},: J% ~( h w* K/ @
{
7 [2 W! }' z, K- s4 E .active_low = 0,
5 N2 T* f% a! V7 w7 f5 s .gpio = DA850_USER_LED3,9 p, }( w( g% V/ n
.name = "user_led3",
8 [* m2 h* `! u( V" n .default_trigger = "default-on",+ p m% U' U4 z: y) V
},
8 I6 f( y: `- I% g7 U, c/ G" H};4 P* N% \, l; F0 D
8 D3 N9 u$ u# b( o9 n; hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 q5 g K y4 ]
.leds = da850_evm_tl_leds,
+ B+ S0 R) J5 l! s$ i) y; _7 P9 S .num_leds = ARRAY_SIZE(da850_evm_tl_leds),' s5 M; X! L7 e) B! ?* k V5 A
};9 U9 I8 m, y* ~' `1 Q& z
z/ H: u; D2 @" w) A7 R- e) g
static void led_dev_release(struct device *dev). ^; W+ O' G; {
{
0 b/ @' C8 g. O$ V7 t( j1 c7 f! I7 q' k};' J9 ?9 f, P, B+ T
; e- M$ n3 d2 j! a4 Sstatic struct platform_device da850_evm_tl_leds_device = {8 @" I* p0 Q# i- |1 M
.name = "leds-gpio",
8 V( z4 K% v6 g; P8 A! ] .id = 1,
' c5 n. n9 h' b: i7 v; k% s# M/ } .dev = {: n6 |" k& V/ X2 ^& N
.platform_data = &da850_evm_tl_leds_pdata,
9 }- \5 u! D$ R, K .release = led_dev_release,
5 c0 z) [" k5 L+ h+ C9 w }! ^5 b0 F6 Z- L' q; r( w6 U
};
7 D4 `/ U1 p) n" s0 \7 \3 Q) ~
; N0 e. P4 a" {4 lstatic int __init led_platform_init(void)4 k6 Q2 [2 x* k% R4 t0 b; J2 G
{
; [7 z5 m/ g, `& m4 P) a int ret;
1 R' o( o6 b- V9 @5 U( s#if 0
& Q7 f# [$ I/ i2 p/ A ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ H# t( [. G% v+ c; V5 g if (ret): L9 c8 V" g, m; x
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 a' t# E# }/ b6 ?; U* k
"%d\n", ret);7 |8 L; X9 N. T& P5 B( K: n* q5 t
#endif, P7 D6 S' J& }3 y
ret = platform_device_register(&da850_evm_tl_leds_device);7 h- w5 b, r& |5 F$ E
if (ret) J A: @8 {9 \! Q2 T+ ~. v
pr_warning("Could not register som GPIO expander LEDS");
# D* }# P4 R3 E( G% ` else! f& {& k' d* p( A: P: ]
printk(KERN_INFO "LED register sucessful!\n");7 x! h* `4 I1 b0 J1 E2 c
* Q7 k0 I; x) @* w6 q( U
return ret;- r: E# M/ X. H! T* E7 n
}
2 S p' h9 i3 J3 j7 a5 ~6 q; f2 f3 y. h, N% N+ g
static void __exit led_platform_exit(void)8 w3 L% }1 @, W+ g. ?
{; u' p* i M5 b' N
platform_device_unregister(&da850_evm_tl_leds_device);
( r! {. _: d) ?! w5 s# y" W
7 f7 V7 ]* A1 V( S* @4 @- ]- T printk(KERN_INFO "LED unregister!\n");9 |& [5 z1 M# `, j: s
}0 a' ?* G& f" ^9 F6 M
. F8 n1 s9 X) K+ V4 E: g
module_init(led_platform_init);
5 L0 n# N( `5 q* o$ Y+ n" ~module_exit(led_platform_exit); m/ Q% d' D3 U" ^
) ^" u# U: ?" k0 ^! ]! c; uMODULE_DESCRIPTION("Led platform driver");
4 V9 N! }/ @3 u6 T+ vMODULE_AUTHOR("Tronlong");( X6 k& c* _; Q- l
MODULE_LICENSE("GPL");* Z7 o7 f& Y5 a- w7 @( a- ^. {, \7 o
% g4 u7 r7 U' s
|
|