|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 ~% p1 ^( b% ?( L M1 h#include <linux/init.h>
( b9 P& v2 L# Q# J! O3 z( l#include <linux/module.h>
) O1 A% z% ~: z4 k( [% d#include <linux/kernel.h>; z4 t) h" h0 h) B' ~: F' c
#include <linux/types.h>
$ |8 G0 _6 J6 A. s* d5 j#include <linux/gpio.h>
9 ]& A+ _2 }: K6 i( {5 K# u4 g#include <linux/leds.h>; _6 @( D# |0 l! T$ h* q
#include <linux/platform_device.h>
8 U/ U, }- Q2 M: c7 ]
5 Z. j$ S* w+ Y; x" c#include <asm/mach-types.h>0 w+ M- ?* E& a+ _) \- _
#include <asm/mach/arch.h>4 a5 }5 G' k# r( n; p6 ]
#include <mach/da8xx.h>
6 e. m4 n" V1 I0 \4 T+ ~9 l#include <mach/mux.h>! w; W6 Y' H; T5 s; ^4 a( t% b
0 O6 K! f7 t' V4 p* T/ R
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ w, z- z! Z, T# D4 t. K; u
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ v$ r3 s* O* e
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 n* G: C: M+ e+ l* k4 ?* @
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) n8 ?# n; y- c; F# X- F+ @+ o
: o7 G$ N4 p8 B( e4 h/* assign the tl som board LED-GPIOs*/6 b; b0 w" S% f/ }
static const short da850_evm_tl_user_led_pins[] = {5 N, y' c1 P- f( L* _
/* These pins are definition at <mach/mux.h> file */3 y, V, s4 c& p
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% w9 Z9 N! {6 Y3 l% [
-16 N+ X& }1 @2 W0 z! e- |7 @& W
};. u. K- Z, Z4 \1 N1 h( v+ \9 f1 E o
: [7 x' j/ A: {3 Rstatic struct gpio_led da850_evm_tl_leds[] = {1 |8 x9 X! Y+ a" g
{1 V" R( V+ y/ ?9 G2 F6 S3 c
.active_low = 0,1 a) J4 n" I0 V" [. x
.gpio = DA850_USER_LED0,
/ P) G6 x4 z; k2 }5 J9 ~3 J2 d5 j: M .name = "user_led0",
' O! ~7 z4 W4 a/ k* e4 X: i .default_trigger = "default-on",* e( H4 i8 J. Z5 k0 ]
},
# b3 R) l6 _$ I! E; m% C' g' |" W {
6 S4 `3 F3 i5 u" Q; ? .active_low = 0,1 [) q# N0 V# L$ V+ G
.gpio = DA850_USER_LED1,
: P) O8 G B# Q) r; b8 h2 G .name = "user_led1",& ?9 C% r9 q% I1 e/ F$ l
.default_trigger = "default-on",
! i7 k( g6 b9 }: `" P },
3 h- A$ h; E0 R {
0 E, j2 Q% k/ R* p .active_low = 0,; Z% s1 I4 Z& y; O
.gpio = DA850_USER_LED2,
' P$ { {! P- ]1 z) m- Q! ^ .name = "user_led2",
) }) n5 e0 h6 j- D7 }" z .default_trigger = "default-on",
! i( U! M0 S; y3 \- I },
5 M( J; |" [% J+ W8 k' ]& F* |& f {; `0 Y3 @/ Q4 }
.active_low = 0,3 |! W& e( B2 S/ W3 j% b
.gpio = DA850_USER_LED3,
6 B8 }7 Q" Y3 ^6 h1 Y" k. d4 T' b7 b# R .name = "user_led3",
" n4 y+ L# j" e5 h% l .default_trigger = "default-on",
: V8 m, ~8 Z& X' s3 H" v },
! \! c4 ^! D- j8 C7 L9 A" \1 `};. I- d* z' t T) C F
7 r8 v# ~4 s8 N5 N' g/ ]5 c8 m+ w
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' n9 {' }0 ` E) O! X
.leds = da850_evm_tl_leds, h! ~3 E: j. |; J1 ]
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),) ^, l% o9 e# e4 \- h
};( W8 ?# p J/ }" B
4 c& x8 B& z% ?9 _, N0 W) [
static void led_dev_release(struct device *dev)
- c$ r* [8 r/ a) D- Y{
3 d8 E W5 }, i6 |6 L, l& m};4 ~/ c$ f2 C3 M3 ~6 g9 W( |
& u7 `$ D: f# G" D! u7 w/ t" c4 S' sstatic struct platform_device da850_evm_tl_leds_device = {3 {2 f) b! W, o2 [8 i5 F
.name = "leds-gpio",
7 o W. a) ?/ d .id = 1,% L$ y \7 D" t3 f! O' K
.dev = {
5 o; d k" w2 k" t5 R: B .platform_data = &da850_evm_tl_leds_pdata,
3 C8 l* h" I5 v; [ .release = led_dev_release,
z, B1 g4 A7 W0 h }% H; j' F% p- ?- N4 l) k) g
};
* B- T3 n+ w4 _6 z& a
( e$ y1 F+ ~8 t t! zstatic int __init led_platform_init(void)
7 F+ o7 o; r, U{ |2 G; w i& ^6 W* B
int ret;
% L& }0 w1 o5 q0 B( E! R7 V#if 0
5 k9 H& V. D9 R% N8 H ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 H. h, d( J+ ?, a1 ?2 e8 p b
if (ret)
# S& O* n b$ z1 d* a. a pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# a5 ]/ p% Z1 _* z* K- b( }/ @
"%d\n", ret);
* Y$ \! d& Q) W3 l8 u- q" i w#endif2 @- m0 k# p% F' \6 _3 n
ret = platform_device_register(&da850_evm_tl_leds_device);: L+ `4 f& n4 H3 N
if (ret)6 M; L8 Y0 o; e v. O/ {' G; N
pr_warning("Could not register som GPIO expander LEDS");
" D) x+ v1 N2 J- A else
, f w4 G* B5 P5 a3 q% s+ V$ R printk(KERN_INFO "LED register sucessful!\n");
; W! ]5 w( e# Y4 N& Y* `& q( L( o4 v; u$ R) ?6 B- F2 d
return ret;6 F9 @/ S6 X% r" V. ~% v
}
5 @! ?; G- @& c: J. b6 @' l% N1 P8 S |1 s, c1 I5 h5 T' J
static void __exit led_platform_exit(void)
3 l7 y/ j) `9 j" @% {+ X% r{' x9 ^3 m$ I% S: j- G" {) v0 j0 M% B! Z
platform_device_unregister(&da850_evm_tl_leds_device);+ u$ i( x. W2 J' o; a: L
, Q( q& y8 O4 @4 I printk(KERN_INFO "LED unregister!\n");
`( \0 ]: s& F! T0 [}3 G# `% Z: M t8 g: q
) P G3 D- P1 e8 a) ] i9 t* pmodule_init(led_platform_init);% j& o) Y& M2 i+ M, z
module_exit(led_platform_exit);3 T' N2 E/ n, R( [% Y
+ ~* k- q' O3 R* O' B
MODULE_DESCRIPTION("Led platform driver");2 N0 `5 L* Z$ N
MODULE_AUTHOR("Tronlong");5 |0 h3 F \/ h$ s% W
MODULE_LICENSE("GPL");
+ U) W" }; G! |' q/ D0 p& W
8 ?- M- Y4 ^# ?% s |
|