Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/ast: Support device quirks

Define struct ast_device_quirks and add an instance for each hardware
generation. The type will provide information about per-gen constants
and oddities.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>>
Link: https://lore.kernel.org/r/20251007150343.273718-3-tzimmermann@suse.de

+38 -9
+4 -1
drivers/gpu/drm/ast/ast_2000.c
··· 211 211 __ast_device_set_tx_chip(ast, tx_chip); 212 212 } 213 213 214 + static const struct ast_device_quirks ast_2000_device_quirks = { 215 + }; 216 + 214 217 struct drm_device *ast_2000_device_create(struct pci_dev *pdev, 215 218 const struct drm_driver *drv, 216 219 enum ast_chip chip, ··· 231 228 return ERR_CAST(ast); 232 229 dev = &ast->base; 233 230 234 - ast_device_init(ast, chip, config_mode, regs, ioregs); 231 + ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2000_device_quirks); 235 232 236 233 ast->dclk_table = ast_2000_dclk_table; 237 234
+4 -1
drivers/gpu/drm/ast/ast_2100.c
··· 432 432 ast->support_wuxga = true; 433 433 } 434 434 435 + static const struct ast_device_quirks ast_2100_device_quirks = { 436 + }; 437 + 435 438 struct drm_device *ast_2100_device_create(struct pci_dev *pdev, 436 439 const struct drm_driver *drv, 437 440 enum ast_chip chip, ··· 452 449 return ERR_CAST(ast); 453 450 dev = &ast->base; 454 451 455 - ast_device_init(ast, chip, config_mode, regs, ioregs); 452 + ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2100_device_quirks); 456 453 457 454 ast->dclk_table = ast_2000_dclk_table; 458 455
+4 -1
drivers/gpu/drm/ast/ast_2200.c
··· 43 43 ast->support_wuxga = true; 44 44 } 45 45 46 + static const struct ast_device_quirks ast_2200_device_quirks = { 47 + }; 48 + 46 49 struct drm_device *ast_2200_device_create(struct pci_dev *pdev, 47 50 const struct drm_driver *drv, 48 51 enum ast_chip chip, ··· 63 60 return ERR_CAST(ast); 64 61 dev = &ast->base; 65 62 66 - ast_device_init(ast, chip, config_mode, regs, ioregs); 63 + ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2200_device_quirks); 67 64 68 65 ast->dclk_table = ast_2000_dclk_table; 69 66
+4 -1
drivers/gpu/drm/ast/ast_2300.c
··· 1407 1407 ast->support_wuxga = true; 1408 1408 } 1409 1409 1410 + static const struct ast_device_quirks ast_2300_device_quirks = { 1411 + }; 1412 + 1410 1413 struct drm_device *ast_2300_device_create(struct pci_dev *pdev, 1411 1414 const struct drm_driver *drv, 1412 1415 enum ast_chip chip, ··· 1427 1424 return ERR_CAST(ast); 1428 1425 dev = &ast->base; 1429 1426 1430 - ast_device_init(ast, chip, config_mode, regs, ioregs); 1427 + ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2300_device_quirks); 1431 1428 1432 1429 ast->dclk_table = ast_2000_dclk_table; 1433 1430
+4 -1
drivers/gpu/drm/ast/ast_2400.c
··· 44 44 ast->support_wuxga = true; 45 45 } 46 46 47 + static const struct ast_device_quirks ast_2400_device_quirks = { 48 + }; 49 + 47 50 struct drm_device *ast_2400_device_create(struct pci_dev *pdev, 48 51 const struct drm_driver *drv, 49 52 enum ast_chip chip, ··· 64 61 return ERR_CAST(ast); 65 62 dev = &ast->base; 66 63 67 - ast_device_init(ast, chip, config_mode, regs, ioregs); 64 + ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2400_device_quirks); 68 65 69 66 ast->dclk_table = ast_2000_dclk_table; 70 67
+4 -1
drivers/gpu/drm/ast/ast_2500.c
··· 618 618 ast->support_wuxga = true; 619 619 } 620 620 621 + static const struct ast_device_quirks ast_2500_device_quirks = { 622 + }; 623 + 621 624 struct drm_device *ast_2500_device_create(struct pci_dev *pdev, 622 625 const struct drm_driver *drv, 623 626 enum ast_chip chip, ··· 638 635 return ERR_CAST(ast); 639 636 dev = &ast->base; 640 637 641 - ast_device_init(ast, chip, config_mode, regs, ioregs); 638 + ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2500_device_quirks); 642 639 643 640 ast->dclk_table = ast_2500_dclk_table; 644 641
+4 -1
drivers/gpu/drm/ast/ast_2600.c
··· 59 59 ast->support_wuxga = true; 60 60 } 61 61 62 + static const struct ast_device_quirks ast_2600_device_quirks = { 63 + }; 64 + 62 65 struct drm_device *ast_2600_device_create(struct pci_dev *pdev, 63 66 const struct drm_driver *drv, 64 67 enum ast_chip chip, ··· 79 76 return ERR_CAST(ast); 80 77 dev = &ast->base; 81 78 82 - ast_device_init(ast, chip, config_mode, regs, ioregs); 79 + ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2600_device_quirks); 83 80 84 81 ast->dclk_table = ast_2500_dclk_table; 85 82
+3 -1
drivers/gpu/drm/ast/ast_drv.c
··· 51 51 enum ast_chip chip, 52 52 enum ast_config_mode config_mode, 53 53 void __iomem *regs, 54 - void __iomem *ioregs) 54 + void __iomem *ioregs, 55 + const struct ast_device_quirks *quirks) 55 56 { 57 + ast->quirks = quirks; 56 58 ast->chip = chip; 57 59 ast->config_mode = config_mode; 58 60 ast->regs = regs;
+7 -1
drivers/gpu/drm/ast/ast_drv.h
··· 164 164 * Device 165 165 */ 166 166 167 + struct ast_device_quirks { 168 + }; 169 + 167 170 struct ast_device { 168 171 struct drm_device base; 172 + 173 + const struct ast_device_quirks *quirks; 169 174 170 175 void __iomem *regs; 171 176 void __iomem *ioregs; ··· 419 414 enum ast_chip chip, 420 415 enum ast_config_mode config_mode, 421 416 void __iomem *regs, 422 - void __iomem *ioregs); 417 + void __iomem *ioregs, 418 + const struct ast_device_quirks *quirks); 423 419 void __ast_device_set_tx_chip(struct ast_device *ast, enum ast_tx_chip tx_chip); 424 420 425 421 /* ast_2000.c */