|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* \9 J7 z" R5 |- N2 ]
#include <linux/init.h>
' ]( s8 H1 I0 b3 `#include <linux/module.h>
. Z- I W4 z" g! ?* I#include <linux/kernel.h>
% k. D9 u2 b+ H- n' A. u#include <linux/types.h>' ?( j& v- d4 r7 Z
#include <linux/gpio.h>
; n# S! W Q# g8 m( e% }#include <linux/leds.h>) X: U- T9 e g. r7 b) L
#include <linux/platform_device.h>
) e4 x3 T' E6 Y! d7 R
! h1 O6 \5 V/ e1 g#include <asm/mach-types.h>' t l2 W2 C/ q/ v' p& T
#include <asm/mach/arch.h>
/ q' i, D4 c$ t& |& a#include <mach/da8xx.h>
6 x* C0 J' N8 R1 W#include <mach/mux.h>6 Q* X& M' G: U
' i. n( g4 e" V) a5 n
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" R7 z" h9 Y& ?+ @% C7 [( `* p; u
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! r8 D& N. z x5 ?#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! I: M( o% m2 Y) g
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# V+ C Y3 g$ ^7 J; X) z
5 m( F8 F) I: B0 u5 K/* assign the tl som board LED-GPIOs*/+ t6 [7 E. o4 k* R+ V
static const short da850_evm_tl_user_led_pins[] = {
$ G& W5 k; l$ p, z3 j /* These pins are definition at <mach/mux.h> file */
: ?) n5 `% U6 C4 S DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,& Q2 U' S& [! g( k5 w& {9 S
-1& f, ~3 c' [6 B% G; M
};4 N! A' r& g6 u% Z" w
" v3 x0 [2 \ j# L# D3 ostatic struct gpio_led da850_evm_tl_leds[] = {$ c) l- g" x0 G8 ]( |8 r
{1 s+ C! [4 c9 O
.active_low = 0,
( v/ K* U- u+ @4 B .gpio = DA850_USER_LED0,5 ]+ x5 Z H; h2 u( o# f
.name = "user_led0",1 w7 i0 T' j% a- Z% G# }0 o6 D
.default_trigger = "default-on",
" V* T8 q& m) @2 S0 d; O% X& @ },
# F4 H: w9 A' `- \ {- G, y @; k% A+ V! U) F
.active_low = 0,
2 n8 S. k" G0 Z+ h .gpio = DA850_USER_LED1,
6 @% o- i1 U: e .name = "user_led1",
* Z& p% q9 a# r6 m" h8 i .default_trigger = "default-on",
; o8 ~# \& t2 q' P4 T+ { },! s/ g$ u( T8 Z4 L7 P5 i3 v/ d
{
: T3 c7 n0 \4 S$ D' u3 p .active_low = 0,
- V* }5 J( C) ] .gpio = DA850_USER_LED2,& H; H$ I2 B' p% M, z$ ^8 I/ R7 n
.name = "user_led2",* ~+ u* O2 `2 V. e; L: @# w. n- P
.default_trigger = "default-on",4 j/ g: a% D0 ^" f3 i( l
},
. u6 L8 d z2 F: F- K* |* g {
9 B1 k2 Z$ B" p# P- U$ a .active_low = 0,
6 l3 N- p% o, h1 ? .gpio = DA850_USER_LED3,6 Q1 y/ c$ M1 W9 {" Q7 o; x& U) {
.name = "user_led3",0 c; {( \9 e$ N4 z4 e, ~
.default_trigger = "default-on",
4 G0 I0 _5 [2 G7 N },; J6 F5 k8 T( o( |& O
};
" P ]" D& b: Z+ x( b
, l0 O$ F) d" }6 {' Wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 d) s( {/ W6 ]5 L4 `* B3 U9 K# x9 P .leds = da850_evm_tl_leds,
* e# |$ G" k6 T+ I+ c: G* i .num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ ^/ J& f/ M$ ~
};5 P$ ?# w0 U4 F
5 W2 q) g0 q( p0 R( l" Kstatic void led_dev_release(struct device *dev)$ Y( K% n; ~0 m$ x% v' S# Y$ R; k( P
{
9 F5 N3 i+ A6 k* V: U" l) t7 I};3 u1 \: C) ?6 A Z3 V
" M+ T8 t* z3 Z$ {) U
static struct platform_device da850_evm_tl_leds_device = {
6 r% h0 |8 F. B# O9 ^# A: J2 { .name = "leds-gpio",; ]9 ^$ G# v2 i! n" ]; j; `. X
.id = 1,* K$ H& Z8 U `2 f9 c3 H
.dev = {
2 p! w% V' U6 q! g2 J .platform_data = &da850_evm_tl_leds_pdata,5 U, F/ J; L' G5 c. C
.release = led_dev_release,0 H& g( k, \* T& ^* k; v# c+ c4 u3 n- x& R
}& J! {* L+ k# h8 S& h2 U, y
};
. Q5 s: x! t6 \6 |6 ^ |( C) T+ ?2 x9 T
static int __init led_platform_init(void)
% g/ h; P+ V4 ?2 D! L! t{
# F# `3 w/ Z7 @. t5 _! ` int ret;& s+ C: ?, F6 S
#if 0
1 J6 A( ?& Q$ t7 z9 W ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);$ }6 k' P, y* e V/ q
if (ret)% m3 N$ I: a8 z" k( z" C$ Z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 s; h7 R. r0 { o% c
"%d\n", ret);2 y5 Z( \) d) |- }+ d9 f4 C
#endif' I) L. L4 h' d. ]
ret = platform_device_register(&da850_evm_tl_leds_device);
3 Z- K0 u4 i" W if (ret)" V3 J2 N) d: f3 V( r, I8 i. J
pr_warning("Could not register som GPIO expander LEDS");0 Z! h7 h, J1 w
else& U2 ~! c+ m7 y5 s' Q
printk(KERN_INFO "LED register sucessful!\n");
# l" C! c( h; B2 n' {1 T
; ^% ]- H8 ?2 `6 t& L return ret;2 c0 C8 `& m/ B, S
}
T% O! a+ ~+ O1 N. W- M7 L( ~8 j9 B1 w. b
static void __exit led_platform_exit(void)
2 [" U8 q; [# `; ? R$ O{; Q4 N7 f p$ ^7 e5 l, \ Q8 Q$ j; I& l
platform_device_unregister(&da850_evm_tl_leds_device);3 Q9 I* @! W# _3 R7 L1 k
; K0 A+ m4 o( s8 G printk(KERN_INFO "LED unregister!\n");
4 ]$ r1 F' v8 Q8 ?: r0 k}4 T; y" L5 f- ^4 t+ L2 u$ G
0 h8 H0 X* k' Y
module_init(led_platform_init);/ \" ?# ]9 F0 d
module_exit(led_platform_exit);
+ n9 d# L- `/ [" }! @0 S1 i. `. o0 b; T% v
MODULE_DESCRIPTION("Led platform driver");
( z3 L/ K p" T$ C/ mMODULE_AUTHOR("Tronlong");* `4 C6 i. B/ Q, P. s0 v
MODULE_LICENSE("GPL");
& b# u, H' X# ?) V, x9 C! `# v" y0 ~+ O. B; ^4 w$ u/ I" C
|
|