|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* P/ e0 V8 |5 E% n#include <linux/init.h>
. r' F4 B8 ^3 ?* r0 |#include <linux/module.h>
! y6 t9 S/ p" o' D1 v. f#include <linux/kernel.h>
3 u8 ]" Y- U0 B: w4 v#include <linux/types.h>6 J% s9 x$ ~0 Y& S H" p
#include <linux/gpio.h>
' Z- i4 }" t0 q' E5 J6 U& o2 U#include <linux/leds.h>( B! S3 j+ N0 v( S# o1 c' S$ G! b
#include <linux/platform_device.h>
- P5 m" O- o2 I+ B
8 ]- d0 I: m) C+ i. q#include <asm/mach-types.h>6 S2 q) @1 [8 O3 J3 v' W5 B
#include <asm/mach/arch.h>/ I/ p" G2 e% Y8 n: Z5 C! V
#include <mach/da8xx.h>5 X/ q& ~$ X1 m3 l' i- i
#include <mach/mux.h>* o7 k8 ]$ |2 q
2 B# Q: j% b$ ?# p7 r3 F' ^
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ A5 A5 h" }$ ^) _; z7 l8 ~5 I#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 U0 E+ V/ {' x1 }#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 @9 b) {. o# d \6 y% w
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): z5 z7 S9 h* b& J5 R
- \* ^# M. T% D N, j5 H/* assign the tl som board LED-GPIOs*/
2 \) ~* i; M9 s0 V& y) |static const short da850_evm_tl_user_led_pins[] = {
5 _ O6 c# `6 n& G1 J /* These pins are definition at <mach/mux.h> file */0 R2 F0 B, F- D* F- Y; X
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* I! c) t' t L7 J+ C
-1
" c; a- \3 l7 O/ ? U# x7 w};( T8 z; K/ @/ s
( ~5 R* H+ B3 }5 _! Y" w, L. B% w. q) p
static struct gpio_led da850_evm_tl_leds[] = { Q+ M1 \- d& O7 Z7 @& N
{
2 S- k4 ~. f0 O M .active_low = 0,
$ A) t# m+ l0 s3 g/ Q .gpio = DA850_USER_LED0, E# l4 W, o8 U- N& S }4 l2 f
.name = "user_led0",$ o8 u+ V8 ~; K# b7 E$ W
.default_trigger = "default-on",
# B9 T' B/ {8 M; B+ k* m },) C) v1 F/ z" Y0 O9 j7 e
{1 v6 |0 i: V! p. W" D9 L
.active_low = 0,4 e- Y! q8 F( k# I6 \- m8 j! R
.gpio = DA850_USER_LED1,& ~4 r5 K' ?) c2 `4 L6 d; Z, K# h
.name = "user_led1",( b0 e* o* `/ s+ B6 [% y
.default_trigger = "default-on",
/ Z3 k8 H7 R2 h; E- o },
0 Z+ `' U/ P; ?" u: m {
6 ^8 V+ }) s: |* n9 Q" O' ~% j .active_low = 0,
& F0 S0 ]) R, ^: Z* o' e .gpio = DA850_USER_LED2,: `* ] p! ?& K
.name = "user_led2",
9 U4 ], _3 j k, u' e5 i .default_trigger = "default-on",/ o6 _2 _; G2 W6 f$ [
},' ]6 r! m; H3 d/ F7 r1 r- z! M
{* r& V0 @/ e1 I/ O
.active_low = 0,
F4 G5 y6 _1 ]1 ^0 P .gpio = DA850_USER_LED3,/ {% v" A& g+ L: w0 Q, A0 s: B
.name = "user_led3",2 ^9 t2 H& ?/ \
.default_trigger = "default-on",
% I9 v/ i# [1 I. H! D },' p' n, Z5 \. O* e. k4 m+ m# H
};, I/ G2 w* K7 x; ?
8 T" E _$ S/ r" t. O z( Istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 L g8 H) a3 P% l
.leds = da850_evm_tl_leds,
6 E3 N& e; [3 T .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 S" G: o* z4 \- E% b% \1 \};
7 P* Q0 n3 Q7 K( ~2 M |" o3 @# v9 _% |9 X; M1 v
static void led_dev_release(struct device *dev)/ X! V5 j! d! ^+ T/ T2 n, m
{6 B: }7 X4 A; m7 y
};
" T- o( O) W1 w0 p1 s* Z
: {, M$ J% J" d9 p/ t( e* U$ bstatic struct platform_device da850_evm_tl_leds_device = {, I+ D* Q8 l6 j- T8 r
.name = "leds-gpio",
1 h+ O% x' _3 U3 n+ ^# J& o .id = 1,, G$ s; Z" O2 Q) x& x4 J: O/ e8 `
.dev = {, p R) K- h; z4 o% X
.platform_data = &da850_evm_tl_leds_pdata,
! _6 ]# s# N9 o6 v2 w1 d5 d; n .release = led_dev_release,
9 N! K% @/ Y/ t( a/ B }5 j" p1 n! O* U0 H0 Z( W) X' X
};
& ?, \7 b1 [9 z& m4 H% x7 Z
* \2 d" ~! B3 W' Y. q3 W0 N; sstatic int __init led_platform_init(void)
5 P* ]7 l) h- U) H& [. A1 F' z{
* Z7 i3 I' t) m! h) t int ret;# u, T1 A* o7 D3 Z) S
#if 09 e) ?4 s' a* k" l+ ^. r% x
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* v6 Q9 s0 S" K' g }/ r
if (ret)
0 `: T* V/ f- K7 y/ t pr_warning("da850_evm_tl_leds_init : User LED mux failed :": Q7 t3 a* P( g; S7 ]& [% J
"%d\n", ret);' G6 c# i* X+ F0 s
#endif. {# \; j+ ~) D
ret = platform_device_register(&da850_evm_tl_leds_device);- Z: g( k/ c! n0 ^2 k
if (ret)* v3 i4 `) t& @, D
pr_warning("Could not register som GPIO expander LEDS");
( l% |, A5 q7 u6 ?5 O, j else2 _. N1 w8 F+ T6 u
printk(KERN_INFO "LED register sucessful!\n");6 e+ z) B* l2 z& e( u3 H$ \2 b* \7 Q0 e
9 N. C/ W$ C6 a" U; V% q8 Y. t return ret;" d# B% M5 A/ w, c, W5 e' Z
}8 \8 H' _' V P
/ X$ D, @* H8 ` R& C) g5 U' h
static void __exit led_platform_exit(void): v2 d8 C. W% u' k: ]) K
{
' }# k3 i4 q1 ` platform_device_unregister(&da850_evm_tl_leds_device);7 p! q$ u- o9 O8 \& q6 r3 h2 k
0 X1 ]8 U9 ~% O. W; ` printk(KERN_INFO "LED unregister!\n");7 e* T6 X% {# O. T2 |- |$ i
}. Q( |& U0 {6 R+ S! i" ^; D
0 s) Z; e* S& X9 t; Z1 H
module_init(led_platform_init);. A% H% O1 c1 b: [! W
module_exit(led_platform_exit);
$ W2 z; c9 n! p( i) k* n/ k# Z- I2 B: k; }% T/ E
MODULE_DESCRIPTION("Led platform driver");1 R& ?2 i% o; j# S5 o2 H% f' C
MODULE_AUTHOR("Tronlong");
; C" U0 Z- e/ z$ z6 kMODULE_LICENSE("GPL");
) m3 O& p* Y( U% a# [3 [
" ~, x U% o4 [7 x9 Y# v: \ |
|