|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
$ |& r5 m1 A# I#include <linux/init.h>
& e8 T5 q1 Q+ M3 V#include <linux/module.h>9 M$ t) B3 e, @) `5 B! a
#include <linux/kernel.h>
d& Y' a" x1 q' q7 Y#include <linux/types.h>
) V2 K v9 S' B4 u3 u5 ^#include <linux/gpio.h>/ b8 g3 ?1 [- ~/ L- W2 Q
#include <linux/leds.h># Y3 ~1 g3 _2 _: N. d. c
#include <linux/platform_device.h>$ z% X6 z6 {/ q' A L
% {: G7 K; w" L j
#include <asm/mach-types.h>8 L* A' ?) P, g% n( y3 y6 Z! C
#include <asm/mach/arch.h>, ]) \4 O4 a" x$ s
#include <mach/da8xx.h>, J. N1 {9 d$ }) b0 E: Z8 _ p
#include <mach/mux.h>
% k0 T4 X' z7 d/ S- E- t+ F8 L5 Z. p W& h3 }, |
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( s o/ u. R5 j9 z' _
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 u$ \/ W5 L$ J2 L" z$ X#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" Z6 q* A+ h, @; y% [. D# K7 {#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 Q2 V n7 [: _9 [* f' V* |
( T; C+ q W1 b% @, _/* assign the tl som board LED-GPIOs*/
' v1 b1 ] N' c0 C+ U% h% ostatic const short da850_evm_tl_user_led_pins[] = {
( G5 ]. j& F6 T /* These pins are definition at <mach/mux.h> file */* d& s- _2 t# H0 y) y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 x: U7 m' @+ I+ q, a -1
* O1 a6 Q5 x( r% Y# ]};8 v& W( G2 l2 ?& N) S Q5 C2 u. S
! u3 w2 U4 Y1 \5 o, i5 f7 a {# qstatic struct gpio_led da850_evm_tl_leds[] = {
; v. ` A* L$ \! f* B {
$ d4 k3 ^1 @5 a! H( O .active_low = 0," l L. @2 v! n" _
.gpio = DA850_USER_LED0,
1 l) @7 P- h0 j .name = "user_led0",3 r2 B3 ]$ B* R2 P% P+ g3 d! `: A
.default_trigger = "default-on",8 c7 N/ ^( u; V( N$ d/ q# r
},8 A+ U5 S2 K9 e/ u9 P
{1 n- J6 N* U6 k8 Q( p
.active_low = 0,
' I5 h- c! Z; V- \ .gpio = DA850_USER_LED1,
- `0 G2 o, I4 Y% R% c .name = "user_led1",
2 j9 g$ i/ S7 j/ X) k" e .default_trigger = "default-on",! N% o6 u9 k8 G, C. @2 U! H& c4 I
},
4 E+ ?5 ?8 @9 b/ e {
# W7 U. ]3 {0 p: e .active_low = 0,3 B2 ]$ X3 x* T& y+ H& V
.gpio = DA850_USER_LED2,1 e( L/ @. t7 m+ d) V3 K1 e' M# y& }, ^
.name = "user_led2",: a8 o* Y$ U) J5 b
.default_trigger = "default-on",
' @: u x6 n ?& C, w3 W },, n1 s; G; F9 [/ f! l7 z2 X' K/ @7 y
{* N+ v! A+ j+ X* y
.active_low = 0,
$ j Y' v1 i( H- ^7 j3 v s .gpio = DA850_USER_LED3,
1 T" {) w. l+ M5 z( P" l/ P .name = "user_led3",
( M9 g! x J, e1 T0 k .default_trigger = "default-on",4 U x4 p9 H6 A8 z( `
},
1 ~+ y; H) n1 _! ]1 J3 X5 u E};: u5 ~" Q, k7 e- {+ L$ u( W! f
8 ~1 \7 j% K! ~static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- w6 z5 f4 T S6 a8 v8 U( g7 ^ .leds = da850_evm_tl_leds,0 V }& U9 X" p
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 G3 s' t" }% A% t};
C a: j- F) F' a6 W
8 C3 K2 f* Q- {1 x) [) Hstatic void led_dev_release(struct device *dev)
: {0 X/ k) `, H# r% o5 r/ ^{ ^5 ]( u/ M) L: |. `# v
};
! k8 Q8 s9 A5 `! E8 z5 S! Z- |' K7 Z
static struct platform_device da850_evm_tl_leds_device = {9 x" J& S) h7 K' d, G$ }! g7 R
.name = "leds-gpio",% o$ z1 E; w; U- C( C
.id = 1,2 z' v9 X# ^/ L: q
.dev = {
1 N8 ?1 a$ f/ b# J9 K/ m .platform_data = &da850_evm_tl_leds_pdata,. p! e3 ]; Z, O5 Y
.release = led_dev_release,
3 Q2 o, Y+ c1 n% @, j* S }
' B/ q/ l l c6 W};+ }# o* D0 Q* o
3 j% {9 W$ t T
static int __init led_platform_init(void)
8 }% v& T1 h4 U2 M8 @8 J5 R{
) C+ }; G( ^! F$ c int ret;
; x$ c. @7 N5 M; L/ ?! J#if 0
) O2 O. Z: _8 D: {3 x! N ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# u0 ]4 [3 S' u9 m) B* F
if (ret)
9 m9 p' j. \; ~ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 `4 P: P/ N, g "%d\n", ret);
! a8 p$ Y; a2 Z2 b/ ]4 k#endif2 c* O5 V5 e; q$ U" v
ret = platform_device_register(&da850_evm_tl_leds_device);; B P5 z' M* C- I* M: ~& \
if (ret)7 z! B& {" i) h3 D
pr_warning("Could not register som GPIO expander LEDS");; n5 A4 w! M/ D
else
; f: D9 e3 K- d- e, e) z( J& S printk(KERN_INFO "LED register sucessful!\n"); B) V1 N6 A" R" a
5 I# D5 o3 F* D1 }' v9 n; q return ret;
& j* ~' l0 \7 [1 f( z8 G0 L}
: J4 I' t: _, s; x) I, M! r' t r
static void __exit led_platform_exit(void) l a& E* T7 d/ `& }; f
{" {+ D! j) p3 S2 q# C* R8 y- t
platform_device_unregister(&da850_evm_tl_leds_device);1 O C. C P( v: j. a+ ~
' f, y2 ?" a2 v, G- W& S
printk(KERN_INFO "LED unregister!\n");* ^- K. l4 z" u, K
}3 P* j. D, a8 r+ H+ C- [9 @# S
$ Y h2 Z# B2 |$ |$ U! O; l
module_init(led_platform_init);
/ z- ?2 l3 X( q- S1 r6 umodule_exit(led_platform_exit);$ A: D' [, v% v5 m( b+ L$ ~$ p
/ p+ t) G) T" e- n# U/ oMODULE_DESCRIPTION("Led platform driver");9 J: P- A" r. y0 g3 E' w9 o# I
MODULE_AUTHOR("Tronlong");4 X6 \) ]; N$ |
MODULE_LICENSE("GPL");' c$ A3 ^% S+ E' Y* S7 `
3 l5 j. C7 A' ]' f |
|