static void set_cursor_image_hw(struct tegra_dc *dc, struct tegra_dc_ext_cursor_image *args, dma_addr_t phys_addr) { unsigned long val; int clip_win; tegra_dc_writel(dc, CURSOR_COLOR(args->foreground.r, args->foreground.g, args->foreground.b), DC_DISP_CURSOR_FOREGROUND); tegra_dc_writel(dc, CURSOR_COLOR(args->background.r, args->background.g, args->background.b), DC_DISP_CURSOR_BACKGROUND); BUG_ON(phys_addr & ~CURSOR_START_ADDR_MASK); switch (TEGRA_DC_EXT_CURSOR_IMAGE_FLAGS_SIZE(args->flags)) { case TEGRA_DC_EXT_CURSOR_IMAGE_FLAGS_SIZE_64x64: val = CURSOR_SIZE_64; break; case TEGRA_DC_EXT_CURSOR_IMAGE_FLAGS_SIZE_128x128: val = CURSOR_SIZE_128; break; case TEGRA_DC_EXT_CURSOR_IMAGE_FLAGS_SIZE_256x256: val = CURSOR_SIZE_256; break; default: val = 0; } /* Get the cursor clip window number */ clip_win = CURSOR_CLIP_GET_WINDOW(tegra_dc_readl(dc, DC_DISP_CURSOR_START_ADDR)); val |= clip_win; tegra_dc_writel(dc, val | CURSOR_START_ADDR(((unsigned long) phys_addr)), DC_DISP_CURSOR_START_ADDR); if (args->flags & TEGRA_DC_EXT_CURSOR_FLAGS_RGBA_NORMAL) tegra_dc_writel(dc, CURSOR_MODE_SELECT(1), DC_DISP_BLEND_CURSOR_CONTROL); else tegra_dc_writel(dc, CURSOR_MODE_SELECT(0), DC_DISP_BLEND_CURSOR_CONTROL); }
static void set_cursor_image_hw(struct tegra_dc *dc, struct tegra_dc_ext_cursor_image *args, dma_addr_t phys_addr) { tegra_dc_writel(dc, CURSOR_COLOR(args->foreground.r, args->foreground.g, args->foreground.b), DC_DISP_CURSOR_FOREGROUND); tegra_dc_writel(dc, CURSOR_COLOR(args->background.r, args->background.g, args->background.b), DC_DISP_CURSOR_BACKGROUND); BUG_ON(phys_addr & ~CURSOR_START_ADDR_MASK); tegra_dc_writel(dc, CURSOR_START_ADDR(((unsigned long) phys_addr)) | ((args->flags & TEGRA_DC_EXT_CURSOR_IMAGE_FLAGS_SIZE_64x64) ? CURSOR_SIZE_64 : 0), DC_DISP_CURSOR_START_ADDR); }