Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.2.
  1// SPDX-License-Identifier: GPL-2.0+
  2/*
  3 * Copyright (C) 2023 Loongson Technology Corporation Limited
  4 */
  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}