本文整理汇总了C++中set_irq_type函数的典型用法代码示例。如果您正苦于以下问题:C++ set_irq_type函数的具体用法?C++ set_irq_type怎么用?C++ set_irq_type使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了set_irq_type函数的19个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: ap4evb_init
//.........这里部分代码省略.........
}
/*
* set irq priority, to avoid sound chopping
* when NFS rootfs is used
* FSI(3) > SMSC911X(2)
*/
intc_set_priority(IRQ_FSI, 3);
i2c_register_board_info(0, i2c0_devices,
ARRAY_SIZE(i2c0_devices));
i2c_register_board_info(1, i2c1_devices,
ARRAY_SIZE(i2c1_devices));
#ifdef CONFIG_AP4EVB_QHD
/*
* QHD
*/
/* enable KEYSC */
gpio_request(GPIO_FN_KEYOUT0, NULL);
gpio_request(GPIO_FN_KEYOUT1, NULL);
gpio_request(GPIO_FN_KEYOUT2, NULL);
gpio_request(GPIO_FN_KEYOUT3, NULL);
gpio_request(GPIO_FN_KEYOUT4, NULL);
gpio_request(GPIO_FN_KEYIN0_136, NULL);
gpio_request(GPIO_FN_KEYIN1_135, NULL);
gpio_request(GPIO_FN_KEYIN2_134, NULL);
gpio_request(GPIO_FN_KEYIN3_133, NULL);
gpio_request(GPIO_FN_KEYIN4, NULL);
/* enable TouchScreen */
set_irq_type(IRQ28, IRQ_TYPE_LEVEL_LOW);
tsc_device.irq = IRQ28;
i2c_register_board_info(1, &tsc_device, 1);
/* LCDC0 */
lcdc_info.clock_source = LCDC_CLK_PERIPHERAL;
lcdc_info.ch[0].interface_type = RGB24;
lcdc_info.ch[0].clock_divider = 1;
lcdc_info.ch[0].flags = LCDC_FLAGS_DWPOL;
lcdc_info.ch[0].lcd_cfg.name = "R63302(QHD)";
lcdc_info.ch[0].lcd_cfg.xres = 544;
lcdc_info.ch[0].lcd_cfg.yres = 961;
lcdc_info.ch[0].lcd_cfg.left_margin = 72;
lcdc_info.ch[0].lcd_cfg.right_margin = 600;
lcdc_info.ch[0].lcd_cfg.hsync_len = 16;
lcdc_info.ch[0].lcd_cfg.upper_margin = 8;
lcdc_info.ch[0].lcd_cfg.lower_margin = 8;
lcdc_info.ch[0].lcd_cfg.vsync_len = 2;
lcdc_info.ch[0].lcd_cfg.sync = FB_SYNC_VERT_HIGH_ACT |
FB_SYNC_HOR_HIGH_ACT;
lcdc_info.ch[0].lcd_size_cfg.width = 44;
lcdc_info.ch[0].lcd_size_cfg.height = 79;
platform_add_devices(qhd_devices, ARRAY_SIZE(qhd_devices));
#else
/*
* WVGA
*/
gpio_request(GPIO_FN_LCDD17, NULL);
gpio_request(GPIO_FN_LCDD16, NULL);
gpio_request(GPIO_FN_LCDD15, NULL);
开发者ID:MichaelSX,项目名称:android_kernel_lenovo_lifetab_s9512,代码行数:67,代码来源:board-ap4evb.c
示例2: insert_headset
static void insert_headset(void)
{
int hook_key_status = 0;
int rc = 0;
unsigned long irq_flags;
int need_update_path = 0;
gpio_set_value(AUDIO_HEADSET_MIC_SHTDWN_N, 0);
HEADSET_INFO("Turn on mic en");
PM_LOG_EVENT(PM_LOG_ON, PM_LOG_AUTIO_MIC);
msleep(headset_data.debounceDelay2);
if( 1 == gpio_get_value(headset_data.jack_gpio))
{
HEADSET_INFO("Headset removed while detection\n");
return;
}
hook_key_status = gpio_get_value(headset_data.hook_gpio);
if ( 1 == hook_key_status )
{
g_headset_type = HSD_EAR_PHONE;
gpio_set_value(AUDIO_HEADSET_MIC_SHTDWN_N, 1);
HEADSET_INFO("Turn off mic en");
PM_LOG_EVENT(PM_LOG_OFF, PM_LOG_AUTIO_MIC);
if (headset_data.recover_chk_times > 0)
{
headset_data.recover_chk_times--;
HEADSET_INFO("Start recover timer, recover_chk_times = %d", headset_data.recover_chk_times);
queue_delayed_work(g_detection_work_queue,&cable_ins_det_work, (HZ/10));
}
}
else
{
msleep(headset_data.debounceDelay1);
if( 1 == gpio_get_value(headset_data.jack_gpio))
{
HEADSET_INFO("Headset removed while detection\n");
return;
}
if ( g_headset_type == HSD_EAR_PHONE)
{
need_update_path = 1;
}
g_headset_type = HSD_HEADSET;
if(1 == need_update_path)
{
HEADSET_INFO("need_update_path = 1, switch audio path to CAD_HW_DEVICE_ID_HEADSET_MIC ");
}
rc = set_irq_type(headset_data.hook_irq, IRQF_TRIGGER_HIGH);
if (rc)
HEADSET_ERR("Set hook key interrupt detection type as rising Fail!!!");
if(HSD_IRQ_DISABLE == headset_data.hook_irq_status)
{
local_irq_save(irq_flags);
enable_irq(headset_data.hook_irq);
headset_data.hook_irq_status = HSD_IRQ_ENABLE;
set_irq_wake(headset_data.hook_irq, 1);
local_irq_restore(irq_flags);
}
}
HEADSET_INFO("g_headset_type= %d", g_headset_type);
rc = set_irq_type(headset_data.jack_irq, IRQF_TRIGGER_HIGH);
if (rc)
HEADSET_ERR(" change IRQ detection type as high active fail!!");
}
开发者ID:ghk,项目名称:StreakKernel,代码行数:95,代码来源:headset_det.c
示例3: arch_setup
//.........这里部分代码省略.........
/* I/O buffer drive ability is high */
__raw_writew((__raw_readw(IODRIVEA) & ~0x00c0) | 0x0080 , IODRIVEA);
if (gpio_get_value(GPIO_PTE6)) {
/* DVI */
lcdc_info.clock_source = LCDC_CLK_EXTERNAL;
lcdc_info.ch[0].clock_divider = 1;
lcdc_info.ch[0].lcd_cfg = ecovec_dvi_modes;
lcdc_info.ch[0].num_cfg = ARRAY_SIZE(ecovec_dvi_modes);
gpio_set_value(GPIO_PTA2, 1);
gpio_set_value(GPIO_PTU1, 1);
} else {
/* Panel */
lcdc_info.clock_source = LCDC_CLK_PERIPHERAL;
lcdc_info.ch[0].clock_divider = 2;
lcdc_info.ch[0].lcd_cfg = ecovec_lcd_modes;
lcdc_info.ch[0].num_cfg = ARRAY_SIZE(ecovec_lcd_modes);
gpio_set_value(GPIO_PTR1, 1);
/* FIXME
*
* LCDDON control is needed for Panel,
* but current sh_mobile_lcdc driver doesn't control it.
* It is temporary correspondence
*/
gpio_request(GPIO_PTF4, NULL);
gpio_direction_output(GPIO_PTF4, 1);
/* enable TouchScreen */
i2c_register_board_info(0, &ts_i2c_clients, 1);
set_irq_type(IRQ0, IRQ_TYPE_LEVEL_LOW);
}
/* enable CEU0 */
gpio_request(GPIO_FN_VIO0_D15, NULL);
gpio_request(GPIO_FN_VIO0_D14, NULL);
gpio_request(GPIO_FN_VIO0_D13, NULL);
gpio_request(GPIO_FN_VIO0_D12, NULL);
gpio_request(GPIO_FN_VIO0_D11, NULL);
gpio_request(GPIO_FN_VIO0_D10, NULL);
gpio_request(GPIO_FN_VIO0_D9, NULL);
gpio_request(GPIO_FN_VIO0_D8, NULL);
gpio_request(GPIO_FN_VIO0_D7, NULL);
gpio_request(GPIO_FN_VIO0_D6, NULL);
gpio_request(GPIO_FN_VIO0_D5, NULL);
gpio_request(GPIO_FN_VIO0_D4, NULL);
gpio_request(GPIO_FN_VIO0_D3, NULL);
gpio_request(GPIO_FN_VIO0_D2, NULL);
gpio_request(GPIO_FN_VIO0_D1, NULL);
gpio_request(GPIO_FN_VIO0_D0, NULL);
gpio_request(GPIO_FN_VIO0_VD, NULL);
gpio_request(GPIO_FN_VIO0_CLK, NULL);
gpio_request(GPIO_FN_VIO0_FLD, NULL);
gpio_request(GPIO_FN_VIO0_HD, NULL);
platform_resource_setup_memory(&ceu0_device, "ceu0", 4 << 20);
/* enable CEU1 */
gpio_request(GPIO_FN_VIO1_D7, NULL);
gpio_request(GPIO_FN_VIO1_D6, NULL);
gpio_request(GPIO_FN_VIO1_D5, NULL);
gpio_request(GPIO_FN_VIO1_D4, NULL);
gpio_request(GPIO_FN_VIO1_D3, NULL);
gpio_request(GPIO_FN_VIO1_D2, NULL);
开发者ID:mesosexy,项目名称:linux-2.6,代码行数:67,代码来源:setup.c
示例4: xxs1500_pcmcia_probe
static int __devinit xxs1500_pcmcia_probe(struct platform_device *pdev)
{
struct xxs1500_pcmcia_sock *sock;
struct resource *r;
int ret, irq;
sock = kzalloc(sizeof(struct xxs1500_pcmcia_sock), GFP_KERNEL);
if (!sock)
return -ENOMEM;
ret = -ENODEV;
/* 36bit PCMCIA Attribute area address */
r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pcmcia-attr");
if (!r) {
dev_err(&pdev->dev, "missing 'pcmcia-attr' resource!\n");
goto out0;
}
sock->phys_attr = r->start;
/* 36bit PCMCIA Memory area address */
r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pcmcia-mem");
if (!r) {
dev_err(&pdev->dev, "missing 'pcmcia-mem' resource!\n");
goto out0;
}
sock->phys_mem = r->start;
/* 36bit PCMCIA IO area address */
r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pcmcia-io");
if (!r) {
dev_err(&pdev->dev, "missing 'pcmcia-io' resource!\n");
goto out0;
}
sock->phys_io = r->start;
/*
* PCMCIA client drivers use the inb/outb macros to access
* the IO registers. Since mips_io_port_base is added
* to the access address of the mips implementation of
* inb/outb, we need to subtract it here because we want
* to access the I/O or MEM address directly, without
* going through this "mips_io_port_base" mechanism.
*/
sock->virt_io = (void *)(ioremap(sock->phys_io, IO_MAP_SIZE) -
mips_io_port_base);
if (!sock->virt_io) {
dev_err(&pdev->dev, "cannot remap IO area\n");
ret = -ENOMEM;
goto out0;
}
sock->socket.ops = &xxs1500_pcmcia_operations;
sock->socket.owner = THIS_MODULE;
sock->socket.pci_irq = gpio_to_irq(GPIO_CARDIRQ);
sock->socket.features = SS_CAP_STATIC_MAP | SS_CAP_PCCARD;
sock->socket.map_size = MEM_MAP_SIZE;
sock->socket.io_offset = (unsigned long)sock->virt_io;
sock->socket.dev.parent = &pdev->dev;
sock->socket.resource_ops = &pccard_static_ops;
platform_set_drvdata(pdev, sock);
/* setup carddetect irq: use one of the 2 GPIOs as an
* edge detector.
*/
irq = gpio_to_irq(GPIO_CDA);
set_irq_type(irq, IRQ_TYPE_EDGE_BOTH);
ret = request_irq(irq, cdirq, 0, "pcmcia_carddetect", sock);
if (ret) {
dev_err(&pdev->dev, "cannot setup cd irq\n");
goto out1;
}
ret = pcmcia_register_socket(&sock->socket);
if (ret) {
dev_err(&pdev->dev, "failed to register\n");
goto out2;
}
printk(KERN_INFO "MyCable XXS1500 PCMCIA socket services\n");
return 0;
out2:
free_irq(gpio_to_irq(GPIO_CDA), sock);
out1:
iounmap((void *)(sock->virt_io + (u32)mips_io_port_base));
out0:
kfree(sock);
return ret;
}
开发者ID:ANFS,项目名称:ANFS-kernel,代码行数:94,代码来源:xxs1500_ss.c
示例5: gpio_keypad_timer_func
static enum hrtimer_restart gpio_keypad_timer_func(struct hrtimer *timer)
{
int out, in;
int pout; // multikey
int key_index;
int gpio;
unsigned int irq;
struct gpio_kp *kp = container_of(timer, struct gpio_kp, timer);
struct gpio_event_matrix_info *mi = kp->keypad_info;
unsigned gpio_keypad_flags = mi->flags;
unsigned polarity = !!(gpio_keypad_flags & GPIOKPF_ACTIVE_HIGH);
out = kp->current_output;
if (out == mi->noutputs) {
out = 0;
kp->last_key_state_changed = kp->key_state_changed;
kp->key_state_changed = 0;
kp->some_keys_pressed = 0;
} else {
key_index = out * mi->ninputs;
for (in = 0; in < mi->ninputs; in++, key_index++) {
gpio = mi->input_gpios[in];
if (gpio_get_value(gpio) ^ !polarity) {
if (kp->some_keys_pressed < 3)
kp->some_keys_pressed++;
kp->key_state_changed |= !__test_and_set_bit(
key_index, kp->keys_pressed);
} else
kp->key_state_changed |= __test_and_clear_bit(
key_index, kp->keys_pressed);
}
gpio = mi->output_gpios[out];
// multikey
for( pout = 0; pout < mi->noutputs; pout++ )
{
if( out != pout )
gpio_direction_output(mi->output_gpios[pout], !polarity);
}
if (gpio_keypad_flags & GPIOKPF_DRIVE_INACTIVE)
gpio_set_value(gpio, !polarity);
else
gpio_direction_input(gpio);
out++;
}
kp->current_output = out;
if (out < mi->noutputs) {
gpio = mi->output_gpios[out];
// multikey
for( pout = 0; pout < mi->noutputs; pout++ )
if( out != pout )
gpio_direction_input(mi->output_gpios[pout]);
if (gpio_keypad_flags & GPIOKPF_DRIVE_INACTIVE)
gpio_set_value(gpio, polarity);
else
gpio_direction_output(gpio, polarity);
hrtimer_start(timer, mi->settle_time, HRTIMER_MODE_REL);
return HRTIMER_NORESTART;
}
if (gpio_keypad_flags & GPIOKPF_DEBOUNCE) {
if (kp->key_state_changed) {
hrtimer_start(&kp->timer, mi->debounce_delay,
HRTIMER_MODE_REL);
return HRTIMER_NORESTART;
}
kp->key_state_changed = kp->last_key_state_changed;
}
#if defined(CONFIG_MACH_COOPER_BASE_KOR)
if(long_key_state == LONG_KEY_CHECK_ACTIVE)
{
if(key_press_count++ > MAX_KEY_PRESS_COUNT)
{
gpio_set_value(GPIO_KEY_SCAN, 0); // kbc0
gpio_direction_output(GPIO_KEY_SCAN, 0);
#if defined(CONFIG_MACH_JUNO_SKT) || defined(CONFIG_MACH_JUNO_KT)
gpio_set_value(GPIO_KEY_SCAN1, 0); // kbc1
gpio_direction_output(GPIO_KEY_SCAN1, 0);
#endif
if(!gpio_get_value(GPIO_VOLUME_UP) && !gpio_get_value(GPIO_VOLUME_DOWN))
{
irq = gpio_to_irq(GPIO_VOLUME_UP);
set_irq_type(irq , IRQ_TYPE_LEVEL_HIGH);
irq = gpio_to_irq(GPIO_VOLUME_DOWN);
set_irq_type(irq , IRQ_TYPE_LEVEL_HIGH);
}
else if (!gpio_get_value(GPIO_VOLUME_UP)) // volume-up
{
irq = gpio_to_irq(GPIO_VOLUME_UP);
set_irq_type(irq , IRQ_TYPE_LEVEL_HIGH);
}
else if(!gpio_get_value(GPIO_VOLUME_DOWN)) // volume-down
{
irq = gpio_to_irq(GPIO_VOLUME_DOWN);
set_irq_type(irq , IRQ_TYPE_LEVEL_HIGH);
}
//.........这里部分代码省略.........
开发者ID:RinaPC,项目名称:android_kernel_samsung_SHW-M290S,代码行数:101,代码来源:gpio_matrix.c
示例6: gpio_keypad_request_irqs
static int gpio_keypad_request_irqs(struct gpio_kp *kp)
{
int i;
int err;
unsigned int irq;
unsigned long request_flags;
struct gpio_event_matrix_info *mi = kp->keypad_info;
switch (mi->flags & (GPIOKPF_ACTIVE_HIGH|GPIOKPF_LEVEL_TRIGGERED_IRQ)) {
default:
request_flags = IRQF_TRIGGER_FALLING;
break;
case GPIOKPF_ACTIVE_HIGH:
request_flags = IRQF_TRIGGER_RISING;
break;
case GPIOKPF_LEVEL_TRIGGERED_IRQ:
request_flags = IRQF_TRIGGER_LOW;
break;
case GPIOKPF_LEVEL_TRIGGERED_IRQ | GPIOKPF_ACTIVE_HIGH:
request_flags = IRQF_TRIGGER_HIGH;
break;
}
for (i = 0; i < mi->ninputs; i++) {
err = irq = gpio_to_irq(mi->input_gpios[i]);
if (err < 0)
goto err_gpio_get_irq_num_failed;
#if !defined(CONFIG_MACH_COOPER_BASE_KOR) && (defined(CONFIG_MACH_COOPER) || defined(CONFIG_MACH_BENI) || defined(CONFIG_MACH_TASS))
switch(mi->input_gpios[i])
{
case 41:
Volume_Up_irq = irq;
break;
case 42:
Volume_Down_irq = irq;
break;
}
#endif
#if defined(CONFIG_MACH_LUCAS)
switch(mi->input_gpios[i])
{
case 3:
Volume_Up_irq = irq;
Volume_Down_irq = irq;
break;
}
#endif
err = request_irq(irq, gpio_keypad_irq_handler, request_flags,
"gpio_kp", kp);
if (err) {
pr_err("gpiomatrix: request_irq failed for input %d, "
"irq %d\n", mi->input_gpios[i], irq);
goto err_request_irq_failed;
}
#if !defined(CONFIG_MACH_LUCAS) || !defined(CONFIG_MACH_CALLISTO)/*&& !defined(CONFIG_MACH_TASS) */
//#ifndef CONFIG_MACH_LUCAS
err = set_irq_wake(irq, 1);
if (err) {
pr_err("gpiomatrix: set_irq_wake failed for input %d, "
"irq %d\n", mi->input_gpios[i], irq);
}
#endif
disable_irq(irq);
if (kp->disabled_irq) {
kp->disabled_irq = 0;
enable_irq(irq);
}
}
/*
#if defined(CONFIG_MACH_TASS)
err = set_irq_wake(gpio_to_irq(GPIO_KBC0), 1);
if (err)
{
pr_err("gpiomatrix: set_irq_wake failed for input %d, " "irq %d\n", GPIO_KBC0, irq);
}
#endif
*/
#if defined (CONFIG_MACH_LUCAS)
err = set_irq_wake(gpio_to_irq(GPIO_KBR6), 1);
if (err)
{
pr_err("gpiomatrix: set_irq_wake failed for input %d, " "irq %d\n", mi->input_gpios[i], irq);
}
#elif defined (CONFIG_MACH_CALLISTO)
err = set_irq_wake(gpio_to_irq(GPIO_KBR5), 1); // hsil
err = set_irq_wake(gpio_to_irq(GPIO_KBR6), 1); // hsil
err = set_irq_wake(gpio_to_irq(GPIO_VOL_UP), 1); // hsil
#endif
//#ifndef CONFIG_MACH_LUCAS
#if defined (CONFIG_MACH_CALLISTO)
// hsil
set_irq_type(gpio_to_irq(GPIO_SLIDE), IRQ_TYPE_EDGE_BOTH);
err = request_irq(gpio_to_irq(GPIO_SLIDE), slide_int_handler, IRQF_DISABLED, "slide_kp", kp);
if (err)
{
printk("[SLIDE] request_irq failed for slide\n");
goto err_request_irq_failed;
//.........这里部分代码省略.........
开发者ID:RinaPC,项目名称:android_kernel_samsung_SHW-M290S,代码行数:101,代码来源:gpio_matrix.c
示例7: pnx_gpio_probe
static int __init pnx_gpio_probe(struct platform_device *pdev)
{
int i,j;
int gpio = 0;
struct gpio_bank *bank;
struct gpio_data *data = pdev->dev.platform_data;
unsigned long flags;
initialized = 1;
printk(KERN_INFO "PNX GPIO\n");
gpio_bank_desc = data->gpio_bank_desc;
gpio_bank_count = data->nb_banks;
for (i = 0; i < gpio_bank_count; i++) {
int gpio_count = 32; /* 32 GPIO per bank */
bank = &gpio_bank_desc[i];
bank->reserved_map = 0; /* must always be initialized */
spin_lock_init(&bank->lock);
/* check if bank is managed by PNX GPIO driver */
if ((bank->gpio_base != 0) && (bank->mux_base != 0)) {
bank->chip.request = pnx_gpio_acquire;
bank->chip.free = pnx_gpio_release;
bank->chip.direction_input = gpio_input;
bank->chip.get = gpio_get;
bank->chip.direction_output = gpio_output;
bank->chip.set = gpio_set;
bank->chip.to_irq = gpio_2irq;
bank->chip.label = "gpio";
bank->chip.base = gpio;
bank->chip.ngpio = gpio_count;
gpiochip_add(&bank->chip);
}
gpio += gpio_count;
}
#ifdef CONFIG_MODEM_BLACK_BOX
/* set init value */
printk(KERN_INFO "PNX GPIO initialize SCON\n");
/* configure MUX and PAD settings */
for (i = 0; i< SCON_REGISTER_NB; i++)
__raw_writel(pnx_scon_init_config[i].scon_reg_value,
pnx_scon_init_config[i].scon_reg_addr);
/* configure GPIO direction and value */
for (i=0; i < gpio_to_configure; i++) {
int index;
bank = get_gpio_bank(pnx_gpio_init_config[i].gpio);
index = get_gpio_index(pnx_gpio_init_config[i].gpio);
_set_gpio_direction(bank, index, pnx_gpio_init_config[i].dir);
_write_gpio_pin(bank, index, pnx_gpio_init_config[i].value);
}
/* reserve GPIO used by Modem */
for (i = 0; i < pnx_modem_gpio_reserved_nb; i++) {
int index;
bank = get_gpio_bank(pnx_modem_gpio_reserved[i]);
index = get_gpio_index(pnx_modem_gpio_reserved[i]);
bank->reserved_map |= (1 << index);
}
/* configure EXTINT used by modem */
for (i = 0; i< pnx_modem_extint_nb; i++)
__raw_writel(pnx_extint_init_config[i].reg_value,
pnx_extint_init_config[i].reg_addr);
printk(KERN_INFO "PNX GPIO Driver\n");
#endif
/* for extint */
for (j = IRQ_COUNT; j < IRQ_COUNT + NR_EXTINT; j++) {
set_irq_chip(j, &gpio_irq_chip);
set_irq_handler(j, handle_simple_irq);
set_irq_flags(j, IRQF_VALID);
}
hw_raw_local_irq_save ( flags );
/* mask all EXT IRQ sources before registring handler */
/* read status */
j = __raw_readl(EXTINT_STATUS_REG) & __raw_readl(EXTINT_ENABLE3_REG);
/* clear IRQ source(s)*/
__raw_writel(j, EXTINT_STATUS_REG);
__raw_writel(0, EXTINT_ENABLE3_REG);
/* set irq in low level */
set_irq_type(IRQ_EXTINT3, IRQF_TRIGGER_LOW);
/* chained GPIO-IRQ on EXTINT3 */
set_irq_chained_handler(IRQ_EXTINT3, gpio_irq_handler);
hw_raw_local_irq_restore ( flags );
return 0;
}
开发者ID:AcerE110Mod,项目名称:kernel_e110_proprietary,代码行数:100,代码来源:gpio.c
示例8: wl1271_probe
static int __devinit wl1271_probe(struct sdio_func *func,
const struct sdio_device_id *id)
{
struct ieee80211_hw *hw;
const struct wl12xx_platform_data *wlan_data;
struct wl1271 *wl;
int ret;
/* We are only able to handle the wlan function */
if (func->num != 0x02)
return -ENODEV;
hw = wl1271_alloc_hw();
if (IS_ERR(hw))
return PTR_ERR(hw);
wl = hw->priv;
wl->if_priv = func;
wl->if_ops = &sdio_ops;
/* Grab access to FN0 for ELP reg. */
func->card->quirks |= MMC_QUIRK_LENIENT_FN0;
wlan_data = wl12xx_get_platform_data();
if (IS_ERR(wlan_data)) {
ret = PTR_ERR(wlan_data);
wl1271_error("missing wlan platform data: %d", ret);
goto out_free;
}
wl->irq = wlan_data->irq;
wl->ref_clock = wlan_data->board_ref_clock;
ret = request_irq(wl->irq, wl1271_irq, 0, DRIVER_NAME, wl);
if (ret < 0) {
wl1271_error("request_irq() failed: %d", ret);
goto out_free;
}
set_irq_type(wl->irq, IRQ_TYPE_EDGE_RISING);
disable_irq(wl->irq);
ret = wl1271_init_ieee80211(wl);
if (ret)
goto out_irq;
ret = wl1271_register_hw(wl);
if (ret)
goto out_irq;
sdio_set_drvdata(func, wl);
/* Tell PM core that we don't need the card to be powered now */
pm_runtime_put_noidle(&func->dev);
wl1271_notice("initialized");
return 0;
out_irq:
free_irq(wl->irq, wl);
out_free:
wl1271_free_hw(wl);
return ret;
}
开发者ID:ANFS,项目名称:ANFS-kernel,代码行数:70,代码来源:sdio.c
示例9: stm_rtc_probe
static int __devinit stm_rtc_probe(struct platform_device *pdev)
{
struct stm_plat_rtc_lpc *plat_data;
struct stm_rtc *rtc;
struct resource *res;
int size;
int ret = 0;
struct rtc_time tm_check;
rtc = kzalloc(sizeof(struct stm_rtc), GFP_KERNEL);
if (unlikely(!rtc))
return -ENOMEM;
spin_lock_init(&rtc->lock);
plat_data = pdev->dev.platform_data;
if (unlikely(plat_data == NULL)) {
dev_err(&pdev->dev, "No platform data\n");
ret = -ENOENT;
goto err_badres;
}
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (unlikely(res == NULL)) {
dev_err(&pdev->dev, "No IO resource\n");
ret = -ENOENT;
goto err_badres;
}
size = res->end - res->start + 1;
rtc->res = request_mem_region(res->start, size, pdev->name);
if (!rtc->res) {
ret = -EBUSY;
goto err_badres;
}
rtc->ioaddr = ioremap_nocache(res->start, size);
if (!rtc->ioaddr) {
ret = -EINVAL;
goto err_badmap;
}
if (plat_data->clk_id)
rtc->clk = clk_get(&pdev->dev, plat_data->clk_id);
else
rtc->clk = clk_get(&pdev->dev, "lpc_clk");
if (IS_ERR(rtc->clk)) {
pr_err("clk lpc_clk not found\n");
ret = PTR_ERR(rtc->clk);
goto err_badreg;
}
clk_enable(rtc->clk);
if (plat_data->force_clk_rate)
clk_set_rate(rtc->clk, plat_data->force_clk_rate);
pr_debug("%s: is using clk: %s @ %lu\n",
DRV_NAME, rtc->clk->name, clk_get_rate(rtc->clk));
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
if (!res) {
pr_err("%s Request irq %d not done\n",
__func__, res->start);
return -ENODEV;
}
rtc->irq = res->start;
set_irq_type(rtc->irq, plat_data->irq_edge_level);
enable_irq_wake(rtc->irq);
if (devm_request_irq(&pdev->dev, rtc->irq, stm_rtc_irq,
IRQF_DISABLED, DRV_NAME, rtc) < 0){
pr_err("%s: Request irq not done\n", __func__);
return -ENODEV;
}
disable_irq(rtc->irq);
device_set_wakeup_capable(&pdev->dev, 1);
platform_set_drvdata(pdev, rtc);
/*
* The RTC-LPC is able to manage date.year > 2038
* but currently the kernel can not manage this date!
* If the RTC-LPC has a date.year > 2038 then
* it's set to the epoch "Jan 1st 2000"
*/
stm_rtc_read_time(&pdev->dev, &tm_check);
if (tm_check.tm_year >= (2038 - 1900)) {
memset(&tm_check, 0, sizeof(tm_check));
tm_check.tm_year = 100;
/*
* FIXME:
* the 'tm_check.tm_mday' should be set to zero but the func-
* tions rtc_tm_to_time and rtc_time_to_time aren't coherent.
*/
tm_check.tm_mday = 1;
stm_rtc_set_time(&pdev->dev, &tm_check);
}
rtc->rtc_dev = rtc_device_register(DRV_NAME, &pdev->dev,
//.........这里部分代码省略.........
开发者ID:coolshou,项目名称:kernel-pdk7105,代码行数:101,代码来源:rtc-stm-lpc.c
示例10: universal_sdhci2_cfg_ext_cd
void universal_sdhci2_cfg_ext_cd(void)
{
printk(KERN_DEBUG "Universal :SD Detect configuration\n");
s3c_gpio_setpull(S5PV210_GPH3(4), S3C_GPIO_PULL_NONE);
set_irq_type(IRQ_EINT(28), IRQ_TYPE_EDGE_BOTH);
}
开发者ID:firedrakexxx,项目名称:android_kernel210,代码行数:6,代码来源:setup-sdhci.c
示例11: nas_probe
static int __devinit nas_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
struct ts_nas *ts;
struct nas_platform_data *pdata = pdata = client->dev.platform_data;
struct input_dev *input_dev;
int err;
if (!pdata) {
dev_err(&client->dev, "platform data is required!\n");
return -EINVAL;
}
if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
return -EIO;
ts = kzalloc(sizeof(struct ts_nas), GFP_KERNEL);
input_dev = input_allocate_device();
if (!ts || !input_dev) {
err = -ENOMEM;
goto err_free_mem;
}
ts->client = client;
ts->irq = client->irq;
ts->input = input_dev;
ts->status =0 ;// fjp add by 2010-9-30
ts->pendown = 0; // fjp add by 2010-10-06
ts->wq = create_rt_workqueue("nas_wq");
INIT_DELAYED_WORK(&ts->work, nas_work);
#ifdef CHECK_STATUS
ts->wq1 = create_rt_workqueue("nas_wq1");
INIT_DELAYED_WORK(&ts->work1, nas_status_check_work);
#endif
ts->model = pdata->model;
snprintf(ts->phys, sizeof(ts->phys),
"%s/input0", dev_name(&client->dev));
input_dev->name = "nas Touchscreen";
input_dev->phys = ts->phys;
input_dev->id.bustype = BUS_I2C;
ts->has_relative_report = 0;
input_dev->evbit[0] = BIT_MASK(EV_ABS)|BIT_MASK(EV_KEY)|BIT_MASK(EV_SYN);
input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
input_dev->keybit[BIT_WORD(BTN_2)] = BIT_MASK(BTN_2); //jaocbchen for dual
#if 0
input_set_abs_params(input_dev, ABS_X, 0, CONFIG_HANNSTAR_MAX_X, 0, 0);
input_set_abs_params(input_dev, ABS_Y, 0, CONFIG_HANNSTAR_MAX_Y, 0, 0);
input_set_abs_params(input_dev, ABS_PRESSURE, 0, 255, 0, 0);
input_set_abs_params(input_dev, ABS_TOOL_WIDTH, 0, 15, 0, 0);
input_set_abs_params(input_dev, ABS_HAT0X, 0, CONFIG_HANNSTAR_MAX_X, 0, 0);
input_set_abs_params(input_dev, ABS_HAT0Y, 0, CONFIG_HANNSTAR_MAX_Y, 0, 0);
input_set_abs_params(input_dev, ABS_MT_POSITION_X,0, CONFIG_HANNSTAR_MAX_X, 0, 0);
input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0, CONFIG_HANNSTAR_MAX_Y, 0, 0);
input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);
input_set_abs_params(input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0);
input_set_abs_params(input_dev, ABS_MT_TRACKING_ID, 0, 10, 0, 0);
#else
input_set_abs_params(input_dev, ABS_X, 0, TOUCH_REPORT_X_MAX, 0, 0);
input_set_abs_params(input_dev, ABS_Y, 0, TOUCH_REPORT_Y_MAX, 0, 0);
input_set_abs_params(input_dev, ABS_PRESSURE, 0, 1, 0, 0);
input_set_abs_params(input_dev, ABS_HAT0X, 0, TOUCH_REPORT_X_MAX, 0, 0);
input_set_abs_params(input_dev, ABS_HAT0Y, 0, TOUCH_REPORT_Y_MAX, 0, 0);
input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0, TOUCH_REPORT_X_MAX, 0, 0);
input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0, TOUCH_REPORT_Y_MAX, 0, 0);
input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);
input_set_abs_params(input_dev, ABS_MT_WIDTH_MAJOR, 0, 15, 0, 0);
#endif
if (pdata->init_platform_hw)
pdata->init_platform_hw();
if (!ts->irq) {
dev_dbg(&ts->client->dev, "no IRQ?\n");
return -ENODEV;
}else{
ts->irq = gpio_to_irq(ts->irq);
}
//miaozh modify
err = request_irq(ts->irq, nas_irq, GPIOEdgelFalling,
client->dev.driver->name, ts);
// err = request_irq(ts->irq, nas_irq, 0,
// client->dev.driver->name, ts);
if (err < 0) {
dev_err(&client->dev, "irq %d busy?\n", ts->irq);
goto err_free_mem;
}
if (err < 0)
goto err_free_irq;
#if 0
err = set_irq_type(ts->irq,IRQ_TYPE_LEVEL_LOW);
if (err < 0) {
dev_err(&client->dev, "irq %d busy?\n", ts->irq);
goto err_free_mem;
}
//.........这里部分代码省略.........
开发者ID:AndrewDB,项目名称:rk3066-kernel,代码行数:101,代码来源:nas_ts.c
示例12: ezx_pcap_probe
static int __devinit ezx_pcap_probe(struct spi_device *spi)
{
struct pcap_platform_data *pdata = spi->dev.platform_data;
struct pcap_chip *pcap;
int i, adc_irq;
int ret = -ENODEV;
/* platform data is required */
if (!pdata)
goto ret;
pcap = kzalloc(sizeof(*pcap), GFP_KERNEL);
if (!pcap) {
ret = -ENOMEM;
goto ret;
}
mutex_init(&pcap->io_mutex);
mutex_init(&pcap->adc_mutex);
INIT_WORK(&pcap->isr_work, pcap_isr_work);
INIT_WORK(&pcap->msr_work, pcap_msr_work);
dev_set_drvdata(&spi->dev, pcap);
/* setup spi */
spi->bits_per_word = 32;
spi->mode = SPI_MODE_0 | (pdata->config & PCAP_CS_AH ? SPI_CS_HIGH : 0);
ret = spi_setup(spi);
if (ret)
goto free_pcap;
pcap->spi = spi;
/* setup irq */
pcap->irq_base = pdata->irq_base;
pcap->workqueue = create_singlethread_workqueue("pcapd");
if (!pcap->workqueue) {
dev_err(&spi->dev, "cant create pcap thread\n");
goto free_pcap;
}
/* redirect interrupts to AP, except adcdone2 */
if (!(pdata->config & PCAP_SECOND_PORT))
ezx_pcap_write(pcap, PCAP_REG_INT_SEL,
(1 << PCAP_IRQ_ADCDONE2));
/* setup irq chip */
for (i = pcap->irq_base; i < (pcap->irq_base + PCAP_NIRQS); i++) {
set_irq_chip_and_handler(i, &pcap_irq_chip, handle_simple_irq);
set_irq_chip_data(i, pcap);
#ifdef CONFIG_ARM
set_irq_flags(i, IRQF_VALID);
#else
set_irq_noprobe(i);
#endif
}
/* mask/ack all PCAP interrupts */
ezx_pcap_write(pcap, PCAP_REG_MSR, PCAP_MASK_ALL_INTERRUPT);
ezx_pcap_write(pcap, PCAP_REG_ISR, PCAP_CLEAR_INTERRUPT_REGISTER);
pcap->msr = PCAP_MASK_ALL_INTERRUPT;
set_irq_type(spi->irq, IRQ_TYPE_EDGE_RISING);
set_irq_data(spi->irq, pcap);
set_irq_chained_handler(spi->irq, pcap_irq_handler);
set_irq_wake(spi->irq, 1);
/* ADC */
adc_irq = pcap_to_irq(pcap, (pdata->config & PCAP_SECOND_PORT) ?
PCAP_IRQ_ADCDONE2 : PCAP_IRQ_ADCDONE);
ret = request_irq(adc_irq, pcap_adc_irq, 0, "ADC", pcap);
if (ret)
goto free_irqchip;
/* setup subdevs */
for (i = 0; i < pdata->num_subdevs; i++) {
ret = pcap_add_subdev(pcap, &pdata->subdevs[i]);
if (ret)
goto remove_subdevs;
}
/* board specific quirks */
if (pdata->init)
pdata->init(pcap);
return 0;
remove_subdevs:
device_for_each_child(&spi->dev, NULL, pcap_remove_subdev);
/* free_adc: */
free_irq(adc_irq, pcap);
free_irqchip:
for (i = pcap->irq_base; i < (pcap->irq_base + PCAP_NIRQS); i++)
set_irq_chip_and_handler(i, NULL, NULL);
/* destroy_workqueue: */
destroy_workqueue(pcap->workqueue);
free_pcap:
kfree(pcap);
ret:
return ret;
//.........这里部分代码省略.........
开发者ID:12rafael,项目名称:jellytimekernel,代码行数:101,代码来源:ezx-pcap.c
示例13: gta02_machine_init
static void __init gta02_machine_init(void)
{
int rc;
/* set the panic callback to make AUX blink fast */
panic_blink = gta02_panic_blink;
switch (S3C_SYSTEM_REV_ATAG) {
case GTA02v6_SYSTEM_REV:
/* we need push-pull interrupt from motion sensors */
lis302_pdata_top.open_drain = 0;
lis302_pdata_bottom.open_drain = 0;
break;
default:
break;
}
spin_lock_init(&motion_irq_lock);
#ifdef CONFIG_CHARGER_PCF50633
INIT_DELAYED_WORK(>a02_charger_work, gta02_charger_worker);
#endif
/* Glamo chip select optimization */
/* *((u32 *)(S3C2410_MEMREG(((1 + 1) << 2)))) = 0x1280; */
/* do not force soft ecc if we are asked to use hardware_ecc */
if (hardware_ecc_str[0] == '1')
gta02_nand_info.software_ecc = 0;
s3c_device_usb.dev.platform_data = >a02_usb_info;
s3c_device_nand.dev.platform_data = >a02_nand_info;
s3c_device_sdi.dev.platform_data = >a02_s3c_mmc_cfg;
/* acc sensor chip selects */
s3c2410_gpio_setpin(S3C2410_GPD12, 1);
s3c2410_gpio_cfgpin(S3C2410_GPD12, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_setpin(S3C2410_GPD13, 1);
s3c2410_gpio_cfgpin(S3C2410_GPD13, S3C2410_GPIO_OUTPUT);
s3c24xx_udc_set_platdata(>a02_udc_cfg);
s3c_i2c0_set_platdata(NULL);
set_s3c2410ts_info(>a02_ts_cfg);
mangle_glamo_res_by_system_rev();
i2c_register_board_info(0, gta02_i2c_devs, ARRAY_SIZE(gta02_i2c_devs));
spi_register_board_info(gta02_spi_board_info,
ARRAY_SIZE(gta02_spi_board_info));
#ifdef CONFIG_CHARGER_PCF50633
mangle_pmu_pdata_by_system_rev();
#endif
platform_add_devices(gta02_devices, ARRAY_SIZE(gta02_devices));
s3c_pm_init();
/* Make sure the modem can wake us up */
set_irq_type(GTA02_IRQ_MODEM, IRQ_TYPE_EDGE_RISING);
rc = request_irq(GTA02_IRQ_MODEM, gta02_modem_irq, IRQF_DISABLED,
"modem", NULL);
if (rc < 0)
printk(KERN_ERR "GTA02: can't request GSM modem wakeup IRQ\n");
enable_irq_wake(GTA02_IRQ_MODEM);
/* Make sure the wifi module can wake us up*/
set_irq_type(GTA02_IRQ_WLAN_GPIO1, IRQ_TYPE_EDGE_RISING);
rc = request_irq(GTA02_IRQ_WLAN_GPIO1, ar6000_wow_irq, IRQF_DISABLED,
"ar6000", NULL);
if (rc < 0)
printk(KERN_ERR "GTA02: can't request ar6k wakeup IRQ\n");
enable_irq_wake(GTA02_IRQ_WLAN_GPIO1);
pm_power_off = gta02_poweroff;
/* Register the HDQ and vibrator as children of pwm device */
#ifdef CONFIG_HDQ_GPIO_BITBANG
gta02_hdq_device.dev.parent = &s3c24xx_pwm_device.dev;
platform_device_register(>a02_hdq_device);
#endif
#ifdef CONFIG_LEDS_GTA02_VIBRATOR
gta02_vibrator_dev.dev.parent = &s3c24xx_pwm_device.dev;
platform_device_register(>a02_vibrator_dev);
#endif
}
开发者ID:mirko,项目名称:openwrt-x-burst,代码行数:87,代码来源:mach-gta02.c
示例14: modemctl_cfg_gpio
static void modemctl_cfg_gpio( void )
{
int err = 0;
unsigned gpio_cp_rst = mdmctl_data.gpio_cp_reset;
unsigned gpio_pda_active = mdmctl_data.gpio_pda_active;
unsigned gpio_phone_active = mdmctl_data.gpio_phone_active;
unsigned gpio_reset_req_n = mdmctl_data.gpio_reset_req_n;
#if ( defined( CONFIG_MACH_SAMSUNG_LATONA ) && ( CONFIG_SAMSUNG_REL_HW_REV >= 2 ) )
unsigned gpio_con_cp_sel = mdmctl_data.gpio_con_cp_sel;
#endif // HW Rev 02
// Mux Setting -> mux_xxxx_rxx.c
gpio_free( gpio_cp_rst );
err = gpio_request( gpio_cp_rst, "CP_RST" );
if( err ) {
printk( "modemctl_cfg_gpio - fail to request gpio %s : %d\n", "CP_RST", err );
}
else {
gpio_direction_output( gpio_cp_rst, 1 );
}
gpio_free( gpio_pda_active );
err = gpio_request( gpio_pda_active, "PDA_ACTIVE" );
if( err ) {
printk( "modemctl_cfg_gpio - fail to request gpio %s : %d\n", "PDA_ACTIVE", err );
}
else {
gpio_direction_output( gpio_pda_active, 0 );
}
gpio_free( gpio_phone_active );
err = gpio_request( gpio_phone_active, "PHONE_ACTIVE" );
if( err ) {
printk( "modemctl_cfg_gpio - fail to request gpio %s : %d\n", "PHONE_ACTIVE", err );
}
else {
gpio_direction_input( gpio_phone_active );
}
gpio_free( gpio_reset_req_n );
err = gpio_request( gpio_reset_req_n, "RESET_REQ_N" );
if( err ) {
printk( "modemctl_cfg_gpio - fail to request gpio %s : %d\n", "RESET_REQ_N", err );
}
else {
gpio_direction_output( gpio_reset_req_n, 0 );
}
#if ( defined( CONFIG_MACH_SAMSUNG_LATONA ) && ( CONFIG_SAMSUNG_REL_HW_REV >= 2 ) )
gpio_free( gpio_con_cp_sel );
err = gpio_request( gpio_con_cp_sel, "CON_CP_SEL" );
if( err ) {
printk( "modemctl_cfg_gpio - fail to request gpio %s : %d\n", "CON_CP_SEL", err );
}
else {
gpio_direction_output( gpio_con_cp_sel, 0 );
}
#endif // HW Rev 02
set_irq_type( OMAP_GPIO_IRQ( OMAP_GPIO_PHONE_ACTIVE ), IRQ_TYPE_EDGE_BOTH );
//set_irq_type( gpio_sim_ndetect, IRQ_TYPE_EDGE_BOTH );
}
开发者ID:Yi-Pei,项目名称:android_kernel_latona,代码行数:66,代码来源:board-latona-peripherals.c
示例15: wl1251_sdio_probe
static int wl1251_sdio_probe(struct sdio_func *func,
const struct sdio_device_id *id)
{
int ret;
struct wl1251 *wl;
struct ieee80211_hw *hw;
hw = wl1251_alloc_hw();
if (IS_ERR(hw))
return PTR_ERR(hw);
wl = hw->priv;
sdio_claim_host(func);
ret = sdio_enable_func(func);
if (ret)
goto release;
sdio_set_block_size(func, 512);
sdio_release_host(func);
SET_IEEE80211_DEV(hw, &func->dev);
wl->if_priv = func;
wl->if_ops = &wl1251_sdio_ops;
wl->set_power = wl1251_sdio_set_power;
if (wl12xx_board_data != NULL) {
wl->set_power = wl12xx_board_data->set_power;
wl->irq = wl12xx_board_data->irq;
wl->use_eeprom = wl12xx_board_data->use_eeprom;
}
if (wl->irq) {
ret = request_irq(wl->irq, wl1251_line_irq, 0, "wl1251", wl);
if (ret < 0) {
wl1251_error("request_irq() failed: %d", ret);
goto disable;
}
set_irq_type(wl->irq, IRQ_TYPE_EDGE_RISING);
disable_irq(wl->irq);
wl1251_sdio_ops.enable_irq = wl1251_enable_line_irq;
wl1251_sdio_ops.disable_irq = wl1251_disable_line_irq;
wl1251_info("using dedicated interrupt line");
} else {
wl1251_sdio_ops.enable_irq = wl1251_sdio_enable_irq;
wl1251_sdio_ops.disable_irq = wl1251_sdio_disable_irq;
wl1251_info("using SDIO interrupt");
}
ret = wl1251_init_ieee80211(wl);
if (ret)
goto out_free_irq;
sdio_set_drvdata(func, wl);
return ret;
out_free_irq:
if (wl->irq)
free_irq(wl->irq, wl);
disable:
sdio_claim_host(func);
sdio_disable_func(func);
release:
sdio_release_host(func);
wl1251_free_hw(wl);
return ret;
}
开发者ID:Medvedroid,项目名称:OT_903D-kernel-2.6.35.7,代码行数:71,代码来源:wl1251_sdio.c
示例16: wl1271_probe
static int __devinit wl1271_probe(struct sdio_func *func,
const struct sdio_device_id *id)
{
struct ieee80211_hw *hw;
struct wl1271 *wl;
int ret;
/* We are only able to handle the wlan function */
if (func->num != 0x02)
return -ENODEV;
hw = wl1271_alloc_hw();
if (IS_ERR(hw))
return PTR_ERR(hw);
wl = hw->priv;
wl->if_priv = func;
wl->if_ops = &sdio_ops;
/* Grab access to FN0 for ELP reg. */
func->card->quirks |= MMC_QUIRK_LENIENT_FN0;
wl->irq = gpio_to_irq(RX71_WL1271_IRQ_GPIO);
if (wl->irq < 0) {
ret = wl->irq;
wl1271_error("could not get irq!");
goto out_free;
}
ret = request_irq(wl->irq, wl1271_irq, 0, DRIVER_NAME, wl);
if (ret < 0) {
wl1271_error("request_irq() failed: %d", ret);
goto out_free;
}
set_irq_type(wl->irq, IRQ_TYPE_EDGE_RISING);
disable_irq(wl->irq);
ret = wl1271_init_ieee80211(wl);
if (ret)
goto out_irq;
ret = wl1271_register_hw(wl);
if (ret)
goto out_irq;
sdio_set_drvdata(func, wl);
wl1271_notice("initialized");
return 0;
out_irq:
free_irq(wl->irq, wl);
out_free:
wl1271_free_hw(wl);
return ret;
}
开发者ID:Medvedroid,项目名称:OT_903D-kernel-2.6.35.7,代码行数:63,代码来源:wl1271_sdio.c
示例17: hs_probe
static int __init hs_probe(struct platform_device *pdev)
{
int result = 0;
mic.hsmajor = 0;
mic.headset_state = 0;
mic.hsbtime.tv.sec = 0;
mic.hsbtime.tv.nsec = 0;
mic.headset_pd = NULL;
mic.check_count = 0;
#ifdef CONFIG_SWITCH
result = hs_switchinit(&mic);
if (result < 0)
return result;
#endif
result = hs_inputdev(&mic);
if (result < 0)
goto err;
result = register_chrdev(mic.hsmajor, "BrcmHeadset", &hs_fops);
if(result < 0)
goto err1;
else if(result > 0 && (mic.hsmajor == 0)) /* this is for dynamic major */
mic.hsmajor = result;
wake_lock_init(&mic.det_wake_lock, WAKE_LOCK_SUSPEND, "sec_jack_det");
INIT_DELAYED_WORK(&(mic.imsi_work), getIMSI_work_func);
/* check if platform data is defined for a particular board variant */
if (pdev->dev.platform_data)
{
mic.headset_pd = pdev->dev.platform_data;
KEY_PRESS_THRESHOLD = mic.headset_pd->key_press_threshold;
KEY_3POLE_THRESHOLD = mic.headset_pd->key_3pole_threshold;
KEY1_THRESHOLD_L = mic.headset_pd->key1_threshold_l;
KEY1_THRESHOLD_U = mic.headset_pd->key1_threshold_u;
KEY2_THRESHOLD_L = mic.headset_pd->key2_threshold_l;
KEY2_THRESHOLD_U = mic.headset_pd->key2_threshold_u;
KEY3_THRESHOLD_L = mic.headset_pd->key3_threshold_l;
KEY3_THRESHOLD_U = mic.headset_pd->key3_threshold_u;
if (mic.headset_pd->hsgpio == NULL)
mic.hsirq = mic.headset_pd->hsirq;
else
{
setup_timer(&mic.timer, gpio_jack_timer, (unsigned long)&mic); // timer register.
if (gpio_request(mic.headset_pd->hsgpio, "headset detect") < 0)
{
printk("%s: Could not reserve headset signal GPIO!\n", __func__);
goto err2;
}
gpio_direction_input(mic.headset_pd->hsgpio);
bcm_gpio_set_db_val(mic.headset_pd->hsgpio, 0x7);
mic.hsirq = gpio_to_irq(mic.headset_pd->hsgpio);
}
mic.hsbirq = mic.headset_pd->hsbirq;
}
else
{
mic.hsirq = platform_get_irq(pdev, 0);
mic.hsbirq = platform_get_irq(pdev, 1);
}
printk("%s: HS irq %d\n", __func__, mic.hsirq);
printk("%s: HSB irq %d\n", __func__, mic.hsbirq);
result = request_irq(mic.hsbirq, hs_buttonisr, IRQF_NO_SUSPEND, "BrcmHeadsetButton", (void *) NULL);
mic.hsbst = DISABLE;
if(result < 0)
goto err2;
result = request_irq(mic.hsirq, hs_isr,(IRQF_DISABLED | IRQF_TRIGGER_RISING|IRQF_TRIGGER_FALLING | IRQF_NO_SUSPEND), "BrcmHeadset", &mic);
if(result < 0)
{
free_irq(mic.hsbirq, &mic);
goto err2;
}
printk("%s: BrcmHeadset: module inserted >>>> . Major number is = %d\n", __func__, mic.hsmajor);
/* Set the ANACR2 bit for mic power down */
board_sysconfig(SYSCFG_AUXMIC, SYSCFG_INIT);
board_sysconfig(SYSCFG_HEADSET, SYSCFG_INIT);
/*Fix the audio path is wrong when headset already plugged in the device then boot device case.*/
if (mic.headset_pd->hsgpio != NULL)
{
mic.headset_pd->check_hs_state(&mic.headset_state);
printk("%s: headset_state:%d\n", __func__, mic.headset_state);
set_irq_type(mic.hsirq, (mic.headset_state) ? IRQF_TRIGGER_RISING : IRQF_TRIGGER_FALLING);
schedule_work(&(mic.switch_data.work));
schedule_delayed_work(&(mic.imsi_work), GET_IMSI_REF_TIME);
}
return 0;
err2: unregister_chrdev(mic.hsmajor,"BrcmHeadset");
//.........这里部分代码省略.........
开发者ID:Ashutos97,项目名称:GT-S5360-opensource-Update-2,代码行数:101,代码来源:brcm_headset.c |
请发表评论