|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- Q0 \$ h# v' ~8 Z" X$ h& c2 ~
#include <linux/init.h>4 M; t$ K, P( r+ F( C5 b/ v, ]
#include <linux/module.h>
" H. q# B) w: |! v1 l#include <linux/kernel.h>
D! f2 k s7 M7 o. D8 S L0 M#include <linux/types.h>
( |3 k \1 {; F/ z; i/ n#include <linux/gpio.h>' f. P- H* F* i; `! Z S
#include <linux/leds.h>9 o @9 J8 f! r. t0 d
#include <linux/platform_device.h>
0 j+ z% w9 p* q4 v- `3 X6 a- T: Y6 e) U0 o6 d
#include <asm/mach-types.h>2 f6 q9 R3 ~: F6 J; v
#include <asm/mach/arch.h>; [! Q* i! E. m5 y8 i4 X) l& e
#include <mach/da8xx.h>
4 k4 o+ x; c- y$ N7 q3 V: a/ b7 x, R#include <mach/mux.h>' {" d* [+ w; K6 w) ~' J
9 K% N* b- H& L
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) r% A( h+ v' u7 E( x+ M#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 x! O O- u. W- F" t; E
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 D5 R3 g p4 V& T; [#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 Q, I+ S' U0 S& A; [" ^
" s6 z! | O$ j! f/* assign the tl som board LED-GPIOs*/( o" U' p) o) e. _1 F5 m0 i# ~
static const short da850_evm_tl_user_led_pins[] = {
! l7 {5 b p3 M! O# F+ v, A# q x- ?; d /* These pins are definition at <mach/mux.h> file */
6 r" i6 m. v# R7 m% G5 K% }7 Q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ y/ |8 ]$ |; T8 X! p1 F
-1/ d0 b" B% P7 L3 L
};% f) G9 z9 k( ~" ^" f( c& L! |
+ x4 D, s4 l- }static struct gpio_led da850_evm_tl_leds[] = {8 k' R/ M# d% G" E/ L
{
! S- `3 P! j& g) S3 q- ~ z5 W .active_low = 0," R; [) f& e2 P9 Y n4 _
.gpio = DA850_USER_LED0,$ q8 K# n g1 L/ }3 u k3 R g
.name = "user_led0",: y5 {1 M0 a; X( N0 T
.default_trigger = "default-on",: W2 `3 A+ ^# ^0 V3 C! U: w9 J. q
},1 K* ~! r1 J+ P5 J" A
{
z# @# |( N n, _% t3 j .active_low = 0,
# y9 m4 u7 w" D$ H6 U( O1 \ .gpio = DA850_USER_LED1,& p* E A: m/ L
.name = "user_led1",
1 M; u* Q9 d( H1 L, H7 Y E .default_trigger = "default-on",! v/ c3 ^7 U8 W& j1 c7 W! {
},2 y: ]+ V: |5 c/ L
{
1 n5 `7 v2 a' Y& x( N, x .active_low = 0,- s9 U# A1 V# s. B" f8 D
.gpio = DA850_USER_LED2,
+ O# Q+ c9 K- ?! n$ j .name = "user_led2",2 K# M) k& V1 J6 _4 S. E
.default_trigger = "default-on",5 y y) Y6 ~. E$ B6 O
}, s/ G8 A% |+ G0 ^* p& R5 T/ ]
{; O! S! M7 l) q0 h P% i
.active_low = 0,
- y6 }+ L+ `5 O {: B; }. m .gpio = DA850_USER_LED3,
0 m( t& j% Q/ @) X .name = "user_led3",
& \. \ Y( q! K: H9 ?" H/ \8 O .default_trigger = "default-on",6 a" j; `: l7 Y) z, I( n
},' ~& D1 k- j7 X5 {- u6 a- E
};
. I$ C; W7 F6 o$ `" O! y i" I8 h
, T& X" E+ [) f K2 K/ l3 |static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" f; i7 _" D! o- k h
.leds = da850_evm_tl_leds,! [. T; R2 R9 C9 O; P" Q5 e
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),% T- v3 r! B; S2 }7 O
};8 ]! U6 J3 F# I1 n7 y
9 u0 b8 R! T0 X& `/ r4 {: R
static void led_dev_release(struct device *dev)
5 ]/ y7 Q& B, s9 f( E% Z{4 {/ X" n. s K
};, D4 ^' e5 O ~, x/ A. S* T
' Z1 F. F. ~' [, H# J# Ystatic struct platform_device da850_evm_tl_leds_device = {
' @: A3 J: u. `# L% M( Q .name = "leds-gpio",
8 F! P. q1 b1 |- Y' V+ E .id = 1,
3 N2 f' D. G, E9 h+ I .dev = {
- ^% P. Y! l: K8 j% T .platform_data = &da850_evm_tl_leds_pdata,
& A* d& `$ P4 }+ d: f .release = led_dev_release,
4 n6 }: M2 P+ r! s. G }
3 q/ s& r6 t. T+ |/ [* K) b};
& _7 ~! y! J: v6 j1 p- d, p/ n3 I. b) q3 J8 ^! G
static int __init led_platform_init(void) [. R5 d, U2 W" h2 n; a1 T. Q
{
- ?4 V0 Y' V- C7 Y int ret;
|2 W! t A8 `% C+ `& ?' |#if 0
) [0 w- r+ m1 v) _7 n: D! o ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 F) R5 B; {; Y5 z if (ret)
3 t2 h' q9 T: J2 ^4 [0 c pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 f8 k! ^& t8 \5 q- N3 c: Q5 Q
"%d\n", ret);
$ r+ b- d0 \4 C#endif& x/ r! B+ x# v: @; U# e& h/ Q
ret = platform_device_register(&da850_evm_tl_leds_device);; U0 ~; d1 c2 `% t
if (ret)7 C9 {; J* e: z8 h B
pr_warning("Could not register som GPIO expander LEDS");8 f2 S3 R1 c" ~- |9 `3 a3 ^
else& Z+ v+ r, r% O) k( D. Y
printk(KERN_INFO "LED register sucessful!\n");5 r* B {* S8 w$ y3 }5 \9 q
% D6 l! |9 }2 o$ d4 {1 ^. p: Y return ret;2 |) r! Q* U2 r3 w
}
- r& y3 f& {$ [+ N9 G% p* R; ?9 n4 u' @$ M4 V% h
static void __exit led_platform_exit(void)9 a. `! q( C5 X. x
{
5 ^/ X. t8 o" @! g* v+ Q- e0 ]( ~5 H platform_device_unregister(&da850_evm_tl_leds_device);4 i8 R9 u0 [8 Y. Q, q
. ?: s' y- D+ J! b# d& i printk(KERN_INFO "LED unregister!\n");
7 [) B- }+ q- l3 h2 V}% V! ~7 \8 E5 Z! V% s+ s4 _
/ K1 `5 w* K r2 x5 S1 u, M0 B! ^* O
module_init(led_platform_init);
1 Z/ y8 \1 _- i+ o5 l) _module_exit(led_platform_exit);" W* p1 @0 d! z7 Q1 H
* t5 C& h+ ~$ kMODULE_DESCRIPTION("Led platform driver");8 [' l& @; e2 ^& s. B# g5 [* i2 G
MODULE_AUTHOR("Tronlong");
2 R( p0 z9 }. cMODULE_LICENSE("GPL");
: i: c2 C# L: e$ r, I N( I: Z! E: f: I8 N! O1 [( |$ E% j
|
|