mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 11:03:43 +02:00
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: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com> Link: https://lore.kernel.org/r/20250922083708.45564-5-tzimmermann@suse.de
This commit is contained in:
parent
59fedf46f7
commit
ff721b545b
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user