|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" c# b3 d- e3 y& `& B: s9 [#include <linux/init.h>
' R* m5 H; n* \% U9 p* h2 `6 ^#include <linux/module.h>
6 L, Y9 f& F8 `1 l" h! Y% h#include <linux/kernel.h>
. @! y! I: [. I8 w8 Y' {#include <linux/types.h>
* _, ?) ~5 |( |$ t9 H& y#include <linux/gpio.h>2 U9 R, v8 d2 P( j
#include <linux/leds.h>" O6 b9 M* X g2 k& b
#include <linux/platform_device.h>( C5 ?* P3 I C3 o+ Y
0 `, A8 p4 N" e% _: M0 ]#include <asm/mach-types.h>/ b n' O" v8 {, E$ u% }
#include <asm/mach/arch.h>) P* U# D9 i. K, t
#include <mach/da8xx.h>5 q$ w4 X& U# o" L4 l9 a. \8 I
#include <mach/mux.h>
2 [2 v+ x( r$ d7 K" |# _
; G( n; A9 ? M& \#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* E1 X' M O4 E* K8 h* k! j& w- f#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 |# ^+ [; ~# a0 u2 p( a
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% A" J! e1 U- @% O
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 y6 v0 ~! g- b4 y! f$ f/ z1 _7 z; t& L
/* assign the tl som board LED-GPIOs*/
$ S p# `: j& v" Y2 S/ B6 M2 ustatic const short da850_evm_tl_user_led_pins[] = {
V: L- [" @) E2 J /* These pins are definition at <mach/mux.h> file */8 l5 [# l- Y7 l2 |8 _6 O' i3 T
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, G) v. i2 [1 P6 P X7 o
-1& T d! ?4 z" o7 m
};; `, b* w. h! q+ D9 X+ i
; M2 s- R. {; x/ g- vstatic struct gpio_led da850_evm_tl_leds[] = {
3 o7 T7 K9 q% c) h {
3 v/ d/ ^4 r8 e# a .active_low = 0,
! a$ B E4 m8 f& `9 `- l .gpio = DA850_USER_LED0,. _" g( E2 Q- _5 r0 ^3 Z
.name = "user_led0",6 F& Q5 u' D/ s7 z+ f8 r3 ?2 \
.default_trigger = "default-on",- G! B& F" d- s! i0 `( v
},- a+ L* Q2 C7 M/ h9 p% ~& ~
{8 q, F* l9 f, H
.active_low = 0,2 E4 J" S: y4 L
.gpio = DA850_USER_LED1,
1 s' g* ]! H$ a6 M .name = "user_led1",& h. `/ R( w! s& V1 e$ y' g" @+ i9 w% t. b g
.default_trigger = "default-on",
( B& U( v9 E2 p# a0 j3 }% H },
: U1 s& y' s% U Q i) h1 @ {
+ _( |- Y! H* u& {0 w6 |. ~ .active_low = 0,
H6 H$ M/ ]; W .gpio = DA850_USER_LED2,
/ I; C, W6 g4 F8 X" q* F ] .name = "user_led2",
& x D: J) a* |! }9 Y7 c& d: B q .default_trigger = "default-on",
" A [/ ^! _- K1 B },7 P- b# A0 R3 x( c3 w( s3 O# v
{$ d; ?4 |5 M+ s2 V
.active_low = 0,+ m0 F1 I" M6 G- g* G3 u8 C* y
.gpio = DA850_USER_LED3,, p6 `+ `0 _: K% ? O/ o1 }% G' v
.name = "user_led3",
2 I! [2 i' [+ {3 u/ k h f6 Y .default_trigger = "default-on",( w9 y9 n7 I: Z$ a, n/ j
},
! @+ v$ b' M+ x9 H. G5 R};
7 x$ s0 R- O% D. B& T) g3 J/ b7 K2 t" |( I& t' d$ v+ X
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
V) K* G/ q# B _9 Z .leds = da850_evm_tl_leds,
@& l9 l3 a* a) n .num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 w# @$ h( y2 O( n: }, s1 t
};* @- N4 L& l0 ^& l& O
! W5 i# Q1 @: D* n$ zstatic void led_dev_release(struct device *dev)
7 @0 M3 G# L1 w* \& g/ ?{
0 F6 Z* K) ^- k7 t6 m8 C* `! m% p! l};7 p8 e. W: v! i- @
% I2 P! k+ o' M' _. _' u" x
static struct platform_device da850_evm_tl_leds_device = {. A1 S5 @, `+ ~0 s
.name = "leds-gpio",+ B( s' [1 A/ l$ e: A* H2 L- R
.id = 1,1 a) p$ o. o0 _+ }% U) C
.dev = {6 q! B5 }; U, F6 n0 c$ }
.platform_data = &da850_evm_tl_leds_pdata, Q& R6 Q) @7 `* N
.release = led_dev_release,; n7 _: W# Q9 _. q9 Z) Q
}
+ O+ g& k7 A4 J9 x4 _# W$ i};8 @/ V# d2 a" \3 s$ j
% [3 D/ r$ P S
static int __init led_platform_init(void)
3 i; ^+ N J1 K9 E" _4 ?{
0 y# B7 |4 `, E. W; F0 I+ } int ret;
2 e$ A8 M* |4 ]0 p# c#if 0$ Y# W: `* O0 b4 r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 u1 Y; U& B' M& I4 H t& s
if (ret)
' l9 v+ N& [; S3 a t3 J! [& b pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; k# C* {0 K4 `3 o( f, M% N
"%d\n", ret);
" o0 v4 z& u$ E4 r4 i1 [5 r6 }( ]- V1 q( Y#endif. y( h6 B- g1 X, Y
ret = platform_device_register(&da850_evm_tl_leds_device);, `+ Z- K4 k( N1 p/ J
if (ret)
, G: `! M* F& p6 G; q pr_warning("Could not register som GPIO expander LEDS");
. g" G5 ~; S- r( A: H, w( |* l else
5 i: A3 R& y; R2 H; C f/ l9 y% D printk(KERN_INFO "LED register sucessful!\n");
( `8 j( x, C8 N, t1 `9 @; z: m' W9 x7 ~: p4 y. r
return ret;( j0 _$ G" O$ O! y, J1 |
}3 m/ y6 T4 X7 C, h8 ^
+ }" Y% B7 q+ F
static void __exit led_platform_exit(void)
! I; ~* P" X" t7 E% c{) m% Z I$ j+ O7 f' q3 @: `& ]& r5 v
platform_device_unregister(&da850_evm_tl_leds_device);, K/ q6 X' e3 I- a( z+ h+ _) Z
( Y: e7 e$ u& x! W A
printk(KERN_INFO "LED unregister!\n");/ y" [% S- o; f1 m
}1 @9 W8 }5 G* u+ i9 ^
8 I( r+ J: F8 J: V6 N5 h
module_init(led_platform_init);! e( C5 ?0 Y0 d W
module_exit(led_platform_exit);6 {# p" {2 [ P
" F* @: a1 v9 C w
MODULE_DESCRIPTION("Led platform driver");
$ W1 e$ n* }2 u7 KMODULE_AUTHOR("Tronlong");
3 U: m$ }8 Y8 y1 d; J B% RMODULE_LICENSE("GPL");. m, H8 Y) M1 \* N! Q
% g2 I& P$ Z. Y7 f
|
|