103 lines · c
1// SPDX-License-Identifier: GPL-2.0+2/*3 * Copyright (C) 2023 Loongson Technology Corporation Limited4 */5 6#include <linux/pci.h>7 8#include "lsdc_drv.h"9 10static const struct lsdc_kms_funcs ls7a1000_kms_funcs = {11 .create_i2c = lsdc_create_i2c_chan,12 .irq_handler = ls7a1000_dc_irq_handler,13 .output_init = ls7a1000_output_init,14 .cursor_plane_init = ls7a1000_cursor_plane_init,15 .primary_plane_init = lsdc_primary_plane_init,16 .crtc_init = ls7a1000_crtc_init,17};18 19static const struct lsdc_kms_funcs ls7a2000_kms_funcs = {20 .create_i2c = lsdc_create_i2c_chan,21 .irq_handler = ls7a2000_dc_irq_handler,22 .output_init = ls7a2000_output_init,23 .cursor_plane_init = ls7a2000_cursor_plane_init,24 .primary_plane_init = lsdc_primary_plane_init,25 .crtc_init = ls7a2000_crtc_init,26};27 28static const struct loongson_gfx_desc ls7a1000_gfx = {29 .dc = {30 .num_of_crtc = 2,31 .max_pixel_clk = 200000,32 .max_width = 2048,33 .max_height = 2048,34 .num_of_hw_cursor = 1,35 .hw_cursor_w = 32,36 .hw_cursor_h = 32,37 .pitch_align = 256,38 .has_vblank_counter = false,39 .funcs = &ls7a1000_kms_funcs,40 },41 .conf_reg_base = LS7A1000_CONF_REG_BASE,42 .gfxpll = {43 .reg_offset = LS7A1000_PLL_GFX_REG,44 .reg_size = 8,45 },46 .pixpll = {47 [0] = {48 .reg_offset = LS7A1000_PIXPLL0_REG,49 .reg_size = 8,50 },51 [1] = {52 .reg_offset = LS7A1000_PIXPLL1_REG,53 .reg_size = 8,54 },55 },56 .chip_id = CHIP_LS7A1000,57 .model = "LS7A1000 bridge chipset",58};59 60static const struct loongson_gfx_desc ls7a2000_gfx = {61 .dc = {62 .num_of_crtc = 2,63 .max_pixel_clk = 350000,64 .max_width = 4096,65 .max_height = 4096,66 .num_of_hw_cursor = 2,67 .hw_cursor_w = 64,68 .hw_cursor_h = 64,69 .pitch_align = 64,70 .has_vblank_counter = true,71 .funcs = &ls7a2000_kms_funcs,72 },73 .conf_reg_base = LS7A2000_CONF_REG_BASE,74 .gfxpll = {75 .reg_offset = LS7A2000_PLL_GFX_REG,76 .reg_size = 8,77 },78 .pixpll = {79 [0] = {80 .reg_offset = LS7A2000_PIXPLL0_REG,81 .reg_size = 8,82 },83 [1] = {84 .reg_offset = LS7A2000_PIXPLL1_REG,85 .reg_size = 8,86 },87 },88 .chip_id = CHIP_LS7A2000,89 .model = "LS7A2000 bridge chipset",90};91 92static const struct lsdc_desc *__chip_id_desc_table[] = {93 [CHIP_LS7A1000] = &ls7a1000_gfx.dc,94 [CHIP_LS7A2000] = &ls7a2000_gfx.dc,95 [CHIP_LS_LAST] = NULL,96};97 98const struct lsdc_desc *99lsdc_device_probe(struct pci_dev *pdev, enum loongson_chip_id chip_id)100{101 return __chip_id_desc_table[chip_id];102}103