static ssize_t iio_bfin_tmr_frequency_show(struct device *dev, struct device_attribute *attr, char *buf) { struct iio_trigger *trig = to_iio_trigger(dev); struct bfin_tmr_state *st = trig->private_data; unsigned int period = get_gptimer_period(st->t->id); unsigned long val; if (period == 0) val = 0; else val = get_sclk() / get_gptimer_period(st->t->id); return sprintf(buf, "%lu\n", val); }
static ssize_t iio_bfin_tmr_frequency_show(struct device *dev, struct device_attribute *attr, char *buf) { struct iio_trigger *trig = dev_get_drvdata(dev); struct bfin_tmr_state *st = trig->private_data; return sprintf(buf, "%lu\n", get_sclk() / get_gptimer_period(st->t->id)); }
static int iio_bfin_tmr_set_state(struct iio_trigger *trig, bool state) { struct bfin_tmr_state *st = trig->private_data; if (get_gptimer_period(st->t->id) == 0) return -EINVAL; if (state) enable_gptimers(st->t->bit); else disable_gptimers(st->t->bit); return 0; }
static irqreturn_t gptimer_example_irq(int irq, void *dev_id) { struct gptimer_data *data = dev_id; if (!get_gptimer_intr(TIMER5_id)) return IRQ_NONE; data->width = get_gptimer_pwidth(TIMER5_id); data->period = get_gptimer_period(TIMER5_id); clear_gptimer_intr(TIMER5_id); return IRQ_HANDLED; }
static irqreturn_t gptimer_example_irq(int irq, void *dev_id) { struct gptimer_data *data = dev_id; /* make sure it was our timer which caused the interrupt */ if (!get_gptimer_intr(TIMER5_id)) return IRQ_NONE; /* read the width/period values that were captured for the waveform */ data->width = get_gptimer_pwidth(TIMER5_id); data->period = get_gptimer_period(TIMER5_id); /* acknowledge the interrupt */ clear_gptimer_intr(TIMER5_id); /* tell the upper layers we took care of things */ return IRQ_HANDLED; }