]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/ast: Support device quirks
authorThomas Zimmermann <tzimmermann@suse.de>
Tue, 7 Oct 2025 14:54:43 +0000 (16:54 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Wed, 15 Oct 2025 07:59:41 +0000 (09:59 +0200)
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
drivers/gpu/drm/ast/ast_2000.c
drivers/gpu/drm/ast/ast_2100.c
drivers/gpu/drm/ast/ast_2200.c
drivers/gpu/drm/ast/ast_2300.c
drivers/gpu/drm/ast/ast_2400.c
drivers/gpu/drm/ast/ast_2500.c
drivers/gpu/drm/ast/ast_2600.c
drivers/gpu/drm/ast/ast_drv.c
drivers/gpu/drm/ast/ast_drv.h

index 74a041e9906123e292928be94aba9c7e9aa37c66..ae4d7a2a0ec801c4363651acf62e4d8cc0d047f4 100644 (file)
@@ -211,6 +211,9 @@ void ast_2000_detect_tx_chip(struct ast_device *ast, bool need_post)
        __ast_device_set_tx_chip(ast, tx_chip);
 }
 
+static const struct ast_device_quirks ast_2000_device_quirks = {
+};
+
 struct drm_device *ast_2000_device_create(struct pci_dev *pdev,
                                          const struct drm_driver *drv,
                                          enum ast_chip chip,
@@ -228,7 +231,7 @@ struct drm_device *ast_2000_device_create(struct pci_dev *pdev,
                return ERR_CAST(ast);
        dev = &ast->base;
 
-       ast_device_init(ast, chip, config_mode, regs, ioregs);
+       ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2000_device_quirks);
 
        ast->dclk_table = ast_2000_dclk_table;
 
index eb3336c84833b5615e4fd81dceabb17fec3ecf30..01e064e67cf7d61a955a00cb5afd5f4454d37b53 100644 (file)
@@ -432,6 +432,9 @@ static void ast_2100_detect_widescreen(struct ast_device *ast)
                ast->support_wuxga = true;
 }
 
+static const struct ast_device_quirks ast_2100_device_quirks = {
+};
+
 struct drm_device *ast_2100_device_create(struct pci_dev *pdev,
                                          const struct drm_driver *drv,
                                          enum ast_chip chip,
@@ -449,7 +452,7 @@ struct drm_device *ast_2100_device_create(struct pci_dev *pdev,
                return ERR_CAST(ast);
        dev = &ast->base;
 
-       ast_device_init(ast, chip, config_mode, regs, ioregs);
+       ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2100_device_quirks);
 
        ast->dclk_table = ast_2000_dclk_table;
 
index 391034d5f4250e24539aa35364230ce90d414761..46b6fc6cf7eb65a2ebb172a85f4a6447805eb03e 100644 (file)
@@ -43,6 +43,9 @@ static void ast_2200_detect_widescreen(struct ast_device *ast)
                ast->support_wuxga = true;
 }
 
+static const struct ast_device_quirks ast_2200_device_quirks = {
+};
+
 struct drm_device *ast_2200_device_create(struct pci_dev *pdev,
                                          const struct drm_driver *drv,
                                          enum ast_chip chip,
@@ -60,7 +63,7 @@ struct drm_device *ast_2200_device_create(struct pci_dev *pdev,
                return ERR_CAST(ast);
        dev = &ast->base;
 
-       ast_device_init(ast, chip, config_mode, regs, ioregs);
+       ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2200_device_quirks);
 
        ast->dclk_table = ast_2000_dclk_table;
 
index 3c9e1960b90c7245a111e30aa269650aa2f7e8d9..b76a80d6aea6790bfdafe9ee46521b0e8b3f47fc 100644 (file)
@@ -1407,6 +1407,9 @@ static void ast_2300_detect_widescreen(struct ast_device *ast)
                ast->support_wuxga = true;
 }
 
+static const struct ast_device_quirks ast_2300_device_quirks = {
+};
+
 struct drm_device *ast_2300_device_create(struct pci_dev *pdev,
                                          const struct drm_driver *drv,
                                          enum ast_chip chip,
@@ -1424,7 +1427,7 @@ struct drm_device *ast_2300_device_create(struct pci_dev *pdev,
                return ERR_CAST(ast);
        dev = &ast->base;
 
-       ast_device_init(ast, chip, config_mode, regs, ioregs);
+       ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2300_device_quirks);
 
        ast->dclk_table = ast_2000_dclk_table;
 
index be866d1cd06afc3820c89fe0222517daa2ac73df..2b41ff69ab0bf33be0542e4caea2d4882c7efa3b 100644 (file)
@@ -44,6 +44,9 @@ static void ast_2400_detect_widescreen(struct ast_device *ast)
                ast->support_wuxga = true;
 }
 
+static const struct ast_device_quirks ast_2400_device_quirks = {
+};
+
 struct drm_device *ast_2400_device_create(struct pci_dev *pdev,
                                          const struct drm_driver *drv,
                                          enum ast_chip chip,
@@ -61,7 +64,7 @@ struct drm_device *ast_2400_device_create(struct pci_dev *pdev,
                return ERR_CAST(ast);
        dev = &ast->base;
 
-       ast_device_init(ast, chip, config_mode, regs, ioregs);
+       ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2400_device_quirks);
 
        ast->dclk_table = ast_2000_dclk_table;
 
index 086c74682a55154f6bb27466c6c341de086ac9f3..6d305a8ccc51655ce2d503fc0faa6692079b6bca 100644 (file)
@@ -618,6 +618,9 @@ static void ast_2500_detect_widescreen(struct ast_device *ast)
                ast->support_wuxga = true;
 }
 
+static const struct ast_device_quirks ast_2500_device_quirks = {
+};
+
 struct drm_device *ast_2500_device_create(struct pci_dev *pdev,
                                          const struct drm_driver *drv,
                                          enum ast_chip chip,
@@ -635,7 +638,7 @@ struct drm_device *ast_2500_device_create(struct pci_dev *pdev,
                return ERR_CAST(ast);
        dev = &ast->base;
 
-       ast_device_init(ast, chip, config_mode, regs, ioregs);
+       ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2500_device_quirks);
 
        ast->dclk_table = ast_2500_dclk_table;
 
index 1f709486f4918dbbd6e7f139c4af3988b77bb20e..df3b429e81748cced02282377c8e55990055493c 100644 (file)
@@ -59,6 +59,9 @@ static void ast_2600_detect_widescreen(struct ast_device *ast)
                ast->support_wuxga = true;
 }
 
+static const struct ast_device_quirks ast_2600_device_quirks = {
+};
+
 struct drm_device *ast_2600_device_create(struct pci_dev *pdev,
                                          const struct drm_driver *drv,
                                          enum ast_chip chip,
@@ -76,7 +79,7 @@ struct drm_device *ast_2600_device_create(struct pci_dev *pdev,
                return ERR_CAST(ast);
        dev = &ast->base;
 
-       ast_device_init(ast, chip, config_mode, regs, ioregs);
+       ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2600_device_quirks);
 
        ast->dclk_table = ast_2500_dclk_table;
 
index a89735c6a462841f74dc1d6b8cb511fe556ed724..b9a9b050b5461ddb79e20ddd131d4fbc35ac73c9 100644 (file)
@@ -51,8 +51,10 @@ 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 __iomem *ioregs,
+                    const struct ast_device_quirks *quirks)
 {
+       ast->quirks = quirks;
        ast->chip = chip;
        ast->config_mode = config_mode;
        ast->regs = regs;
index b2b30a0e4ffbcfa30456c794d288f570bc7814ba..2a2c28693dc6a47f58312ad73e187c1d52e53ae2 100644 (file)
@@ -164,9 +164,14 @@ to_ast_connector(struct drm_connector *connector)
  * Device
  */
 
+struct ast_device_quirks {
+};
+
 struct ast_device {
        struct drm_device base;
 
+       const struct ast_device_quirks *quirks;
+
        void __iomem *regs;
        void __iomem *ioregs;
        void __iomem *dp501_fw_buf;
@@ -414,7 +419,8 @@ 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 __iomem *ioregs,
+                    const struct ast_device_quirks *quirks);
 void __ast_device_set_tx_chip(struct ast_device *ast, enum ast_tx_chip tx_chip);
 
 /* ast_2000.c */