|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
: _1 C$ T) N1 E1 h+ }#include <linux/init.h>
\$ _( k6 I' S9 b9 ?( V5 {#include <linux/module.h>+ g# j) j5 r& f) _, K
#include <linux/kernel.h>
# Q2 W$ T/ k7 Z2 @! o& ?#include <linux/types.h>/ O$ \7 l4 p3 o) f- R
#include <linux/gpio.h>
7 u; D2 t- ]& l. u#include <linux/leds.h>
8 g! U u$ H v% }#include <linux/platform_device.h>7 @( v/ {9 }$ M' t
$ q1 K. o; w, E; C7 o
#include <asm/mach-types.h>% K2 x* C7 P# Z3 T2 n' T
#include <asm/mach/arch.h>
, X' F8 k/ `+ N/ g) ?) E, O#include <mach/da8xx.h>
# H v3 q1 X ^) `( m#include <mach/mux.h>
" \7 ?, K7 Q% V; w1 a' I3 P6 R- k Q0 {' e. c& h) l
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 B3 P) ]% d0 H+ l. g% v8 J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 Y3 j- H0 S0 \2 J* v# [
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* w) o/ P( D- v1 L$ M2 |2 A: D- z. ^#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 d8 ^5 r: u5 s: c' n6 T0 h, F$ q' I6 Y' ^' C
/* assign the tl som board LED-GPIOs*/4 Y6 V5 J$ |& J+ Z$ o; R
static const short da850_evm_tl_user_led_pins[] = {
4 i8 F( ~" `7 G /* These pins are definition at <mach/mux.h> file */
2 X) `0 K' X6 R. F9 G DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 }% f* W3 T$ G( O: `) M -1
" M5 G; ^7 b) N$ c$ L( M};" j& V& v) ~' R2 w8 I; M$ }: t
3 \) ?2 u( ~' x+ h4 n
static struct gpio_led da850_evm_tl_leds[] = {0 x& |* b* L4 g$ m
{
" }2 S0 ? W3 m3 j .active_low = 0,- Q4 e1 i( w$ ~& Q4 ~; _
.gpio = DA850_USER_LED0,
. [# f9 l) r. b% @/ N .name = "user_led0",/ X+ o9 i7 I; ~: Z
.default_trigger = "default-on",
' b5 Q4 M+ C( t: `% G) N },
* G; Z5 R' O/ n7 [! r% l9 X* z {
1 W: d7 f3 L1 m+ @! k! K* Z1 \& u .active_low = 0,/ ~; S: }0 x( U# C
.gpio = DA850_USER_LED1,
c$ }* r1 |: }) J3 ` .name = "user_led1",: p R* G8 b& `" x
.default_trigger = "default-on",- D% |' T6 {1 u* c
},$ m4 g6 n5 U3 J8 i$ o/ Y
{
0 ]7 L% J- R& v3 D- g- z .active_low = 0,8 o7 c$ B% P; T9 u) j4 D- H, H4 @
.gpio = DA850_USER_LED2,$ A& G% s/ j [/ m: q
.name = "user_led2",
( [5 [) L2 M1 W7 f! Y' Z% H .default_trigger = "default-on",) ?! e1 O8 s0 C; U2 l
},$ g4 j& Y D- Z% p7 j; B9 u) n
{
+ s$ s, U3 O4 I& ^7 p .active_low = 0,
3 Q% r! D7 d( A6 D8 P .gpio = DA850_USER_LED3,3 x/ r+ t( P1 @4 ]7 T7 ~
.name = "user_led3",
c+ C0 P0 o6 p) L0 | .default_trigger = "default-on",
8 N1 I w5 |0 t+ v8 n },
" q$ v U$ g- O; j8 K( K O};! T; Y+ a& _. |! ~
: B# `7 e5 P+ I
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 j, e: b/ A7 q0 X .leds = da850_evm_tl_leds,
% d/ K# Q9 h) H) | .num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 X/ H7 g6 i' w9 K
};: c" }0 `. g- e8 ?, c+ E" a
4 d8 e! x; q# D g7 x
static void led_dev_release(struct device *dev)
$ Y7 V( o9 w& J; o( c5 }) ^# w{/ @" m7 ]$ v4 D7 V, ^+ A- A: [
};
! [& `6 A1 Z$ h
" i$ N- z+ o0 K% ]6 J+ [static struct platform_device da850_evm_tl_leds_device = {: ~' a1 f% c( D; p
.name = "leds-gpio",
- G# `, t5 i. { .id = 1,
4 M" i2 b: f. ~: v( K; f' k0 O .dev = {
& e2 E4 K: [# @* L' t) L7 e8 g, w* g .platform_data = &da850_evm_tl_leds_pdata,! ~& v8 M& l/ K3 e W" c7 e7 F
.release = led_dev_release,
h1 U3 R7 u4 o7 U0 v' ~# _. x" ]" J; _! u }
1 v1 C1 H8 v0 ]" I" Q};
1 Q t1 r3 q1 j" w( x
8 W' _- l0 ^7 z: @1 r& V& mstatic int __init led_platform_init(void)* \& g6 Z% Z. E+ s
{
* K8 g% W" |8 `5 b1 E int ret;$ E5 `5 S5 P4 n+ ?5 D/ g5 f
#if 0/ u R( p( [: C1 C6 z9 O( P9 j
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" s B# x; x; A {2 o% {; t if (ret)
* P5 ?( P& m4 R) `* q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( p! C' E* C0 D: Q6 x) x @) Y "%d\n", ret);+ i7 W# G& z5 [
#endif
( F+ J9 W4 m' o3 ^- g9 t ret = platform_device_register(&da850_evm_tl_leds_device);/ i* ] o# m; ^9 d% d" A
if (ret): q7 e. z+ _8 d6 A+ b. t- N1 k
pr_warning("Could not register som GPIO expander LEDS");% Q. v1 p, s9 w3 z; H) S0 H
else: v$ \8 q3 K& g% V/ [" @6 ]! W* F9 Q& D
printk(KERN_INFO "LED register sucessful!\n");3 ^5 W- u6 V1 U3 ~# D. K$ \
$ \# G; c) L6 x4 B S u# B
return ret;
* o w$ V2 v- H& J}
. \7 C% B q% D2 z' z
' f6 L' j! S. V: k7 x( Sstatic void __exit led_platform_exit(void); ]; Q% P. E; N' ]8 h/ ?/ Z: j
{
0 ? x1 A' {$ f. Y$ F) G0 q platform_device_unregister(&da850_evm_tl_leds_device);& ~& \6 Y2 e# m( I( A" R1 a
" A, X* c; M* i; X" [, C5 X3 Q
printk(KERN_INFO "LED unregister!\n");
8 J. c; Z; o+ T1 `( l6 I5 y( R}' z! {6 f! H% p2 W, b% u* w. x" @ h' w
. D( B3 H3 ^' L+ R6 N6 L% c
module_init(led_platform_init);0 g0 `7 l5 ^, y5 o d) r g1 H. ]
module_exit(led_platform_exit);. V" y1 D" S2 ?) }( o
1 o B1 k: o1 ~ c/ g# J; V( V9 C+ e
MODULE_DESCRIPTION("Led platform driver");
& M0 v( f0 ^* n/ a* @' X/ FMODULE_AUTHOR("Tronlong");% }' p% Z8 O0 p; U' s1 r; d- E7 A
MODULE_LICENSE("GPL");
9 h$ v& C5 H# W9 }. t5 [/ ]2 q
|
|