drm/nouveau: just pass gpio line to pwm_*, not entire gpio struct
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / nouveau / nouveau_drv.h
index 156aea75d3e7299786015544b608e86e56fe5e67..909b991416edae347485a6d0a146ea06b17895bd 100644 (file)
@@ -396,8 +396,9 @@ struct nouveau_display_engine {
        int (*early_init)(struct drm_device *);
        void (*late_takedown)(struct drm_device *);
        int (*create)(struct drm_device *);
-       int (*init)(struct drm_device *);
        void (*destroy)(struct drm_device *);
+       int (*init)(struct drm_device *);
+       void (*fini)(struct drm_device *);
 
        struct drm_property *dithering_mode;
        struct drm_property *dithering_depth;
@@ -493,6 +494,7 @@ struct nouveau_pm_level {
        u32 copy;
        u32 daemon;
        u32 vdec;
+       u32 dom6;
        u32 unka0;      /* nva3:nvc0 */
        u32 hub01;      /* nvc0- */
        u32 hub06;      /* nvc0- */
@@ -548,19 +550,14 @@ struct nouveau_pm_engine {
        struct device *hwmon;
        struct notifier_block acpi_nb;
 
-       int (*clock_get)(struct drm_device *, u32 id);
-       void *(*clock_pre)(struct drm_device *, struct nouveau_pm_level *,
-                          u32 id, int khz);
-       void (*clock_set)(struct drm_device *, void *);
-
        int  (*clocks_get)(struct drm_device *, struct nouveau_pm_level *);
        void *(*clocks_pre)(struct drm_device *, struct nouveau_pm_level *);
-       void (*clocks_set)(struct drm_device *, void *);
+       int (*clocks_set)(struct drm_device *, void *);
 
        int (*voltage_get)(struct drm_device *);
        int (*voltage_set)(struct drm_device *, int voltage);
-       int (*pwm_get)(struct drm_device *, struct dcb_gpio_entry*, u32*, u32*);
-       int (*pwm_set)(struct drm_device *, struct dcb_gpio_entry*, u32, u32);
+       int (*pwm_get)(struct drm_device *, int line, u32*, u32*);
+       int (*pwm_set)(struct drm_device *, int line, u32, u32);
        int (*temp_get)(struct drm_device *);
 };
 
@@ -796,6 +793,8 @@ struct drm_nouveau_private {
        struct nouveau_vm *chan_vm;
 
        struct nvbios vbios;
+       u8 *mxms;
+       struct list_head i2c_ports;
 
        struct nv04_mode_state mode_reg;
        struct nv04_mode_state saved_reg;
@@ -866,6 +865,7 @@ extern char *nouveau_perflvl;
 extern int nouveau_perflvl_wr;
 extern int nouveau_msi;
 extern int nouveau_ctxfw;
+extern int nouveau_mxmdcb;
 
 extern int nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state);
 extern int nouveau_pci_resume(struct pci_dev *pdev);
@@ -1110,6 +1110,10 @@ extern int call_lvds_script(struct drm_device *, struct dcb_entry *, int head,
                            enum LVDS_script, int pxclk);
 bool bios_encoder_match(struct dcb_entry *, u32 hash);
 
+/* nouveau_mxm.c */
+int  nouveau_mxm_init(struct drm_device *dev);
+void nouveau_mxm_fini(struct drm_device *dev);
+
 /* nouveau_ttm.c */
 int nouveau_ttm_global_init(struct drm_nouveau_private *);
 void nouveau_ttm_global_release(struct drm_nouveau_private *);
@@ -1347,13 +1351,19 @@ extern int nv17_tv_create(struct drm_connector *, struct dcb_entry *);
 extern int nv04_display_early_init(struct drm_device *);
 extern void nv04_display_late_takedown(struct drm_device *);
 extern int nv04_display_create(struct drm_device *);
-extern int nv04_display_init(struct drm_device *);
 extern void nv04_display_destroy(struct drm_device *);
+extern int nv04_display_init(struct drm_device *);
+extern void nv04_display_fini(struct drm_device *);
 
 /* nvd0_display.c */
 extern int nvd0_display_create(struct drm_device *);
-extern int nvd0_display_init(struct drm_device *);
 extern void nvd0_display_destroy(struct drm_device *);
+extern int nvd0_display_init(struct drm_device *);
+extern void nvd0_display_fini(struct drm_device *);
+struct nouveau_bo *nvd0_display_crtc_sema(struct drm_device *, int crtc);
+void nvd0_display_flip_stop(struct drm_crtc *);
+int nvd0_display_flip_next(struct drm_crtc *, struct drm_framebuffer *,
+                          struct nouveau_channel *, u32 swap_interval);
 
 /* nv04_crtc.c */
 extern int nv04_crtc_create(struct drm_device *, int index);
@@ -1450,6 +1460,8 @@ extern int nouveau_gem_ioctl_info(struct drm_device *, void *,
 /* nouveau_display.c */
 int nouveau_display_create(struct drm_device *dev);
 void nouveau_display_destroy(struct drm_device *dev);
+int nouveau_display_init(struct drm_device *dev);
+void nouveau_display_fini(struct drm_device *dev);
 int nouveau_vblank_enable(struct drm_device *dev, int crtc);
 void nouveau_vblank_disable(struct drm_device *dev, int crtc);
 int nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
@@ -1603,6 +1615,13 @@ extern void nv_wo32(struct nouveau_gpuobj *, u32 offset, u32 val);
 #define NV_TRACEWARN(d, fmt, arg...) NV_PRINTK(KERN_NOTICE, d, fmt, ##arg)
 #define NV_TRACE(d, fmt, arg...) NV_PRINTK(KERN_INFO, d, fmt, ##arg)
 #define NV_WARN(d, fmt, arg...) NV_PRINTK(KERN_WARNING, d, fmt, ##arg)
+#define NV_WARNONCE(d, fmt, arg...) do {                                       \
+       static int _warned = 0;                                                \
+       if (!_warned) {                                                        \
+               NV_WARN(d, fmt, ##arg);                                        \
+               _warned = 1;                                                   \
+       }                                                                      \
+} while(0)
 
 /* nouveau_reg_debug bitmask */
 enum {