|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# f' v6 a. q. d2 F7 ~! l
#include <linux/init.h>
' L5 o0 n9 t$ L5 u5 _+ |#include <linux/module.h>: e0 _3 F' }1 F- g' N
#include <linux/kernel.h>
. B% q$ \- I0 D& s% N* _& H/ q#include <linux/types.h>9 J" ]! Y% B$ {+ k
#include <linux/gpio.h>
9 g$ n( [6 d1 a) M#include <linux/leds.h>% U4 ?; T5 i, j9 f9 Q/ o0 L
#include <linux/platform_device.h>& R& J! i" N( N" R: C8 z; m: R
0 B! D; y8 b2 E- w. V
#include <asm/mach-types.h>
, I$ v4 J, X- i$ t5 m#include <asm/mach/arch.h>
8 W* r7 D% Q2 M8 B8 f4 P5 {( J3 W#include <mach/da8xx.h>) ^' A; N' T" Q- y
#include <mach/mux.h>( L$ o& Q1 B) Z; _
, q6 R# h. X. g/ a, v
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 ?# J6 b2 h* r& ?1 O6 Z" y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: j$ A' N& q) E0 f0 ]( z: W#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ q: c3 J; H' J5 J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 ~2 W1 M3 o/ \9 x' Z2 N. ]
! S% x6 o* X H8 ? f
/* assign the tl som board LED-GPIOs*/
5 ~2 |' Z' ?: {7 e9 V; tstatic const short da850_evm_tl_user_led_pins[] = {( C O8 e8 A F+ ?2 S7 R" u( p
/* These pins are definition at <mach/mux.h> file */ I3 j u2 z/ I! Q3 R8 }& a+ j& j
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; @9 J# W: h2 ~ -1
0 L) ?8 F- r7 |: [2 o) d. b" e, V# o K};1 N8 X/ O. C/ T
" n* h9 f( n1 Y, q6 c
static struct gpio_led da850_evm_tl_leds[] = {
7 |* Q. P9 k( Z2 w {- ~3 m& \% v& I3 e9 e) {5 b5 h
.active_low = 0,
. S1 i6 G- @7 ~: H+ y, C .gpio = DA850_USER_LED0,8 t0 g) x# a8 A' }+ |
.name = "user_led0",
( p& e+ q# D6 R* Z' L9 M .default_trigger = "default-on",
& r4 f" Y7 c" b% e x, y; E },
2 C o F- J/ R- S. f4 S+ Y+ Q {
+ F! U, e; _% d2 q; R6 P .active_low = 0,8 M& [1 ?4 L4 n1 O+ o# s
.gpio = DA850_USER_LED1,
! J: z0 [: ?- N/ N .name = "user_led1",
, m8 `1 w2 s4 E .default_trigger = "default-on",1 m3 `% L, r- v/ R- D5 A7 C
},, K; g6 Q5 ?9 F0 p; {& J
{
$ M9 p4 S/ r6 x .active_low = 0,
5 x7 Y" I/ J, |# E! r+ W( o T .gpio = DA850_USER_LED2,
; z" E( ] b F! A+ a. q' I- G .name = "user_led2",% k- u" e$ C( X1 p' N- P
.default_trigger = "default-on",
% ?; I# Q/ u" |- g },
8 ^9 K% x! w3 K# F6 } {
/ H# q+ h/ F% @! t( l .active_low = 0,
: Q5 g* t( ~: i) l5 N; d" ` .gpio = DA850_USER_LED3,
& f4 L# e2 ^! V$ G4 ^ .name = "user_led3",
3 n: R' i( f. e/ t( F+ W1 | .default_trigger = "default-on",
* s8 e. f' F9 k# `2 [ },9 Z2 d2 H2 m$ ^; r
};
$ q( E: P0 d& G2 t
/ u; }: W. K+ n- Gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 a- u# w" G1 J+ Z# d4 i6 [
.leds = da850_evm_tl_leds,
' A- i. P$ u6 \7 w .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* H. O* O' `: S5 w/ o};1 @, p* R2 e: M" Q
2 B; ?5 G0 r" _- A1 Y
static void led_dev_release(struct device *dev)
$ s1 T, V! D9 I3 D: ]* ?! h{
- n- y; u6 P0 d$ D# ]; L E4 [};
$ w1 ]& G* j' c; S4 B3 M0 k
1 |" B! j u! q1 C$ qstatic struct platform_device da850_evm_tl_leds_device = {3 ~3 O* d, g/ A, F( g- @ c
.name = "leds-gpio",9 R( c6 f" X) B; X& ~ [0 ^: c4 R4 M" `
.id = 1,3 ~* h4 X+ H( k1 a
.dev = {- N$ {; l, v; s& @% e& F! t
.platform_data = &da850_evm_tl_leds_pdata,
n2 F- S' z4 w' |0 |- { .release = led_dev_release,
2 y! |5 D ]! p. M8 f }7 b$ q- m! a+ m. c
};: h( _' e$ b- c- c6 k/ S' g1 D
3 S$ Y8 v V$ Z1 B, Q: e
static int __init led_platform_init(void)
4 _4 u% f3 z$ `. n{2 T0 x4 C8 T, l# F; P$ g% W) W
int ret;* G2 A- Q" ^0 I+ i, [8 V
#if 03 t/ ^4 G# I+ {/ v2 K9 C- ?
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. D5 c# D* @4 V! U if (ret)
' r/ ?( w. u3 q, y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 Q" g* M* G/ J, x "%d\n", ret);1 q$ h5 [+ H( r5 l" M/ d4 w x. n
#endif! U# `5 [6 d; d3 l+ {
ret = platform_device_register(&da850_evm_tl_leds_device);7 I1 C- T- k+ D" i3 }
if (ret)! {0 I1 k( @2 `+ N
pr_warning("Could not register som GPIO expander LEDS");
# o: H1 W* Y8 F2 `7 |' p else
, S" c( G# N6 P# v+ z2 H" d printk(KERN_INFO "LED register sucessful!\n");
7 `' z7 N# H; M( [
7 s6 r n6 I n$ {/ Q return ret;
7 v& c5 j% P$ y- q4 M6 W) f) I( Z" m}( n8 C1 L' i$ }) Y
4 Y' b4 q- i* X, f' W- U# [, Istatic void __exit led_platform_exit(void)
0 @( O5 ^ g! Q$ p" W/ r! [ @{
/ R" ?. X( T* V platform_device_unregister(&da850_evm_tl_leds_device);
% h: |2 F/ A7 Y- }: c D0 M
" `; E5 {3 v7 b5 h& V3 B printk(KERN_INFO "LED unregister!\n");
' Z% U+ x) ^% O# V2 D# Y}, t4 x6 T/ _7 R- @! j- B
4 A( _# B E/ [/ ?3 W# D
module_init(led_platform_init);' E( ^' ~- J5 Z0 [5 p5 C
module_exit(led_platform_exit);
: {- d O1 W1 k, i; S
$ z4 g3 e) H. _MODULE_DESCRIPTION("Led platform driver");' G6 Q2 C$ E. P! a% w$ }
MODULE_AUTHOR("Tronlong");
9 [7 A" \0 k8 A5 z2 Q8 Z. yMODULE_LICENSE("GPL");
' t1 T8 `6 }) G6 @- X: x: P, X Q5 ~6 G7 R5 q4 d! t
|
|