static void serial_omap_mdr1_errataset(struct uart_omap_port *up, u8 mdr1) { u8 timeout = 255; printk("serial_omap_mdr1_errataser start\n"); serial_out(up, UART_OMAP_MDR1, mdr1); rtdm_task_sleep(2000); serial_out(up, UART_FCR, up->fcr | UART_FCR_CLEAR_XMIT | UART_FCR_CLEAR_RCVR); /* * Wait for FIFO to empty: when empty, RX_FIFO_E bit is 0 and * TX_FIFO_E bit is 1. */ while (UART_LSR_THRE != (serial_in(up, UART_LSR) & (UART_LSR_THRE | UART_LSR_DR))) { timeout--; if (!timeout) { /* Should *never* happen. we warn and carry on */ dev_crit(up->dev, "Errata i202: timedout %x\n",serial_in(up, UART_LSR)); break; } rtdm_task_sleep(1000); } printk("serial_omap_mdr1_errataser end\n"); }
/* Timer task routine */ static void loop_task_proc(void *arg) { struct a4l_device *dev = (struct a4l_device*)arg; struct a4l_subdevice *input_subd, *output_subd; lpprv_t *priv = (lpprv_t *)dev->priv; input_subd = a4l_get_subd(dev, LOOP_INPUT_SUBD); output_subd = a4l_get_subd(dev, LOOP_OUTPUT_SUBD); if (input_subd == NULL || output_subd == NULL) { a4l_err(dev, "loop_task_proc: subdevices unavailable\n"); return; } while (1) { int running; running = priv->loop_running; if (running) { uint16_t value; int ret=0; while (ret==0) { ret = a4l_buf_get(output_subd, &value, sizeof(uint16_t)); if (ret == 0) { a4l_info(dev, "loop_task_proc: " "data available\n"); a4l_buf_evt(output_subd, 0); ret = a4l_buf_put(input_subd, &value, sizeof(uint16_t)); if (ret==0) a4l_buf_evt(input_subd, 0); } } } rtdm_task_sleep(LOOP_TASK_PERIOD); } }
static int rtdmtest_task(void *arg) { int ret; nanosecs_abs_t wakeup; struct rttst_rtdmtest_config *config = (struct rttst_rtdmtest_config *)arg; printk("%s: started with delay=%lld\n", __FUNCTION__, task_period); wakeup = rtdm_clock_read(); while (1) { #if 0 if ((ret = rtdm_task_sleep(task_period))) break; #else wakeup += task_period; if ((ret = rtdm_task_sleep_until(wakeup))) break; #endif //printk("%s: time=%lld\n", __FUNCTION__, rtdm_clock_read()); } printk("%s terminating, ret=%d\n", __FUNCTION__, ret); return ret; }