static void pxa930_trkball_config(struct pxa930_trkball *trkball) { uint32_t tbcr; /* According to spec, need to write the filters of x,y to 0xf first! */ tbcr = __raw_readl(trkball->mmio_base + TBCR); write_tbcr(trkball, tbcr | TBCR_X_FLT(0xf) | TBCR_Y_FLT(0xf)); write_tbcr(trkball, TBCR_X_FLT(trkball->pdata->x_filter) | TBCR_Y_FLT(trkball->pdata->y_filter)); /* According to spec, set TBCR_TBRST first, before clearing it! */ tbcr = __raw_readl(trkball->mmio_base + TBCR); write_tbcr(trkball, tbcr | TBCR_TBRST); write_tbcr(trkball, tbcr & ~TBCR_TBRST); __raw_writel(TBSBC_TBSBC, trkball->mmio_base + TBSBC); __raw_writel(0, trkball->mmio_base + TBSBC); pr_debug("%s: final TBCR=%x!\n", __func__, __raw_readl(trkball->mmio_base + TBCR)); }
static void pxa930_trkball_config(struct pxa930_trkball *trkball) { uint32_t tbcr; /* */ tbcr = __raw_readl(trkball->mmio_base + TBCR); write_tbcr(trkball, tbcr | TBCR_X_FLT(0xf) | TBCR_Y_FLT(0xf)); write_tbcr(trkball, TBCR_X_FLT(trkball->pdata->x_filter) | TBCR_Y_FLT(trkball->pdata->y_filter)); /* */ tbcr = __raw_readl(trkball->mmio_base + TBCR); write_tbcr(trkball, tbcr | TBCR_TBRST); write_tbcr(trkball, tbcr & ~TBCR_TBRST); __raw_writel(TBSBC_TBSBC, trkball->mmio_base + TBSBC); __raw_writel(0, trkball->mmio_base + TBSBC); pr_debug("%s: final TBCR=%x!\n", __func__, __raw_readl(trkball->mmio_base + TBCR)); }