Commit ff721b54 authored by Thomas Zimmermann's avatar Thomas Zimmermann
Browse files

drm/ast: Prepare per-Gen device initialization



Switch device creation by hardware Gen. Return the value from the
call to ast_detect_chip(). All generations are still initialized
by ast_device_create().

Also add ast_device_init() for setting some common fields in struct
ast_device.

Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarJocelyn Falempe <jfalempe@redhat.com>
Link: https://lore.kernel.org/r/20250922083708.45564-5-tzimmermann@suse.de
parent 59fedf46
Loading
Loading
Loading
Loading
+22 −3
Original line number Diff line number Diff line
@@ -47,6 +47,18 @@ static int ast_modeset = -1;
MODULE_PARM_DESC(modeset, "Disable/Enable modesetting");
module_param_named(modeset, ast_modeset, int, 0400);

void ast_device_init(struct ast_device *ast,
		     enum ast_chip chip,
		     enum ast_config_mode config_mode,
		     void __iomem *regs,
		     void __iomem *ioregs)
{
	ast->chip = chip;
	ast->config_mode = config_mode;
	ast->regs = regs;
	ast->ioregs = ioregs;
}

void __ast_device_set_tx_chip(struct ast_device *ast, enum ast_tx_chip tx_chip)
{
	static const char * const info_str[] = {
@@ -281,7 +293,7 @@ static int ast_detect_chip(struct pci_dev *pdev,
	*chip_out = chip;
	*config_mode_out = config_mode;

	return 0;
	return __AST_CHIP_GEN(chip);
}

static int ast_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
@@ -292,6 +304,7 @@ static int ast_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
	void __iomem *ioregs;
	enum ast_config_mode config_mode;
	enum ast_chip chip;
	unsigned int chip_gen;
	struct drm_device *drm;
	bool need_post = false;

@@ -364,10 +377,16 @@ static int ast_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
		return ret;

	ret = ast_detect_chip(pdev, regs, ioregs, &chip, &config_mode);
	if (ret)
	if (ret < 0)
		return ret;
	chip_gen = ret;

	drm = ast_device_create(pdev, &ast_driver, chip, config_mode, regs, ioregs, need_post);
	switch (chip_gen) {
	default:
		drm = ast_device_create(pdev, &ast_driver, chip, config_mode, regs, ioregs,
					need_post);
		break;
	}
	if (IS_ERR(drm))
		return PTR_ERR(drm);
	pci_set_drvdata(pdev, drm);
+5 −0
Original line number Diff line number Diff line
@@ -416,6 +416,11 @@ struct ast_crtc_state {
int ast_mm_init(struct ast_device *ast);

/* ast_drv.c */
void ast_device_init(struct ast_device *ast,
		     enum ast_chip chip,
		     enum ast_config_mode config_mode,
		     void __iomem *regs,
		     void __iomem *ioregs);
void __ast_device_set_tx_chip(struct ast_device *ast, enum ast_tx_chip tx_chip);

/* ast_2000.c */
+1 −4
Original line number Diff line number Diff line
@@ -112,10 +112,7 @@ struct drm_device *ast_device_create(struct pci_dev *pdev,
		return ERR_CAST(ast);
	dev = &ast->base;

	ast->chip = chip;
	ast->config_mode = config_mode;
	ast->regs = regs;
	ast->ioregs = ioregs;
	ast_device_init(ast, chip, config_mode, regs, ioregs);

	if (AST_GEN(ast) >= 4)
		ast_2300_detect_tx_chip(ast);