static ssize_t set_enabled(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct omap_wdt_dev *wdev = platform_get_drvdata(omap_wdt_dev); char *cp; int len = count; if (!kernelpet) { printk(KERN_WARNING "The watchdog is disabled permanently.\n"); return -EINVAL; } cp = memchr(buf, '\n', count); if (cp) len = cp - buf; if (wdev->omap_wdt_users) { if (len == sizeof ctrl_off - 1 && strncmp(buf, ctrl_off, len) == 0) { if (is_wdt_enabled == WDT_DISABLE) { printk(KERN_WARNING "The watchdog is already disabled\n"); return -EINVAL; } disable_wdt(wdev); } else if (len == sizeof ctrl_on - 1 && strncmp(buf, ctrl_on, len) == 0) { if (is_wdt_enabled == WDT_ENABLE) { printk(KERN_WARNING "The watchdog is already enabled\n"); return -EINVAL; } enable_wdt(wdev); } else { printk(KERN_WARNING "Invalid enable setting, use on or off\n"); return -EINVAL; } } return count; }
//********************** 初期化関数 void initialize(void){ spi_selectGPS(0); spi_selectDrive(0); subPIC_power(0); i2c_power(0); adc_power(0); //デバイス初期化 hmr_device_initialize(); hmr_clock_initialize_withNormal(); hmr_interrupt_initalize(); if(Config_DefaultMobilePhone){ hmr_uart1_initialize(UART1_MODULEID_MP); }else{ hmr_uart1_initialize(UART1_MODULEID_RF); } hmr_uart1_power_switch(1,hmr_uart1_getModuleID()); rs_fputc('O',Stream_VMC); rs_fputc('K',Stream_VMC); rs_fputc((unsigned char)(RCON),Stream_VMC); rs_fputc((unsigned char)(RCON>>8),Stream_VMC); rs_fputc(0x0d,Stream_VMC); rs_fputc(0x0a,Stream_VMC); hmr_uart2_initialize(); hmr_spi2_initialize(); hmr_i2c_initialize(); hmr_adc_initialize(); rs_fputc('I',Stream_VMC); rs_fputc('n',Stream_VMC); rs_fputc(0x0d,Stream_VMC); rs_fputc(0x0a,Stream_VMC); spi_selectGPS(0); spi_selectDrive(0); subPIC_power(1); i2c_power(1); adc_power(1); // HMR_PIN_I2C_ACCEL0_PW_set(1); // HMR_PIN_ADCPW_CH0to6_set(1); HMR_PIN_ADCPW_CH7_set(1); HMR_PIN_ADCPW_CH8_set(1); rs_fputc('P',Stream_VMC); rs_fputc('w',Stream_VMC); rs_fputc(0x0d,Stream_VMC); rs_fputc(0x0a,Stream_VMC); inertial_initialize(); //通信関連機能の初期化 pVMC=com_createVMC1(); vmc1_initialize(pVMC,(const unsigned char*)("hmr"),(const unsigned char*)("ctr")); com_initialize(); msg_initialize(); rs_fputc('C',Stream_VMC); rs_fputc('m',Stream_VMC); rs_fputc(0x0d,Stream_VMC); rs_fputc(0x0a,Stream_VMC); //タスク機能の初期化 // task_initialize(); sprite_power(1); sprite_initialize(); set_interrupt_fputflag(Stream_VMC);//割り込み予約 enable_interrupt_fget(Stream_VMC); enable_interrupt_fput(Stream_VMC); //Watch dog timer if(Config_DisableWatchDogTimer){//DIPがOFFのとき disable_wdt(); }else{ enable_wdt(); } }
static int __devinit omap_wdt_probe(struct platform_device *pdev) { struct resource *res, *mem, *res_irq; struct omap_wdt_dev *wdev; int ret; #ifdef CONFIG_OMAP_WATCHDOG_CONTROL int i; #endif /* reserve static register mappings */ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { ret = -ENOENT; goto err_get_resource; } if (omap_wdt_dev) { ret = -EBUSY; goto err_busy; } mem = request_mem_region(res->start, resource_size(res), pdev->name); if (!mem) { ret = -EBUSY; goto err_busy; } res_irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); wdev = kzalloc(sizeof(struct omap_wdt_dev), GFP_KERNEL); if (!wdev) { ret = -ENOMEM; goto err_kzalloc; } wdev->omap_wdt_users = 0; wdev->mem = mem; wdev->dev = &pdev->dev; wdev->base = ioremap(res->start, resource_size(res)); if (!wdev->base) { ret = -ENOMEM; goto err_ioremap; } if (res_irq) { ret = request_irq(res_irq->start, omap_wdt_interrupt, 0, dev_name(&pdev->dev), wdev); if (ret) goto err_irq; wdev->irq = res_irq->start; } platform_set_drvdata(pdev, wdev); pm_runtime_enable(wdev->dev); pm_runtime_irq_safe(wdev->dev); pm_runtime_get_sync(wdev->dev); omap_wdt_disable(wdev); omap_wdt_adjust_timeout(timer_margin); wdev->omap_wdt_miscdev.parent = &pdev->dev; wdev->omap_wdt_miscdev.minor = WATCHDOG_MINOR; wdev->omap_wdt_miscdev.name = "watchdog"; wdev->omap_wdt_miscdev.fops = &omap_wdt_fops; ret = misc_register(&(wdev->omap_wdt_miscdev)); if (ret) goto err_misc; pr_info("OMAP Watchdog Timer Rev 0x%02x: initial timeout %d sec\n", __raw_readl(wdev->base + OMAP_WATCHDOG_REV) & 0xFF, timer_margin); pm_runtime_put_sync(wdev->dev); omap_wdt_dev = pdev; /* if (kernelpet && wdev->irq) { wdev->nb.notifier_call = omap_wdt_nb_func; atomic_notifier_chain_register(&touch_watchdog_notifier_head, &wdev->nb); omap_wdt_setup(wdev); } */ #ifdef CONFIG_OMAP_WATCHDOG_CONTROL for (i = 0; i < ARRAY_SIZE(wdt_attributes); i++) { ret = device_create_file(&pdev->dev, wdt_attributes[i]); if (ret != 0) { printk(KERN_ERR "Failed to create attr %d: %d\n", i, ret); } } if (!is_wdt_enabled) { disable_wdt(wdev); printk(KERN_WARNING "Disable omap watchdog\n"); } #endif return 0; err_misc: platform_set_drvdata(pdev, NULL); if (wdev->irq) free_irq(wdev->irq, wdev); err_irq: iounmap(wdev->base); err_ioremap: wdev->base = NULL; kfree(wdev); err_kzalloc: release_mem_region(res->start, resource_size(res)); err_busy: err_get_resource: return ret; }