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 880fdd183bf75a6781bc9bd9d8a2d762b5d6f091..909b991416edae347485a6d0a146ea06b17895bd 100644 (file)
@@ -396,8 +396,15 @@ 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;
+       struct drm_property *underscan_property;
+       struct drm_property *underscan_hborder_property;
+       struct drm_property *underscan_vborder_property;
 };
 
 struct nouveau_gpio_engine {
@@ -487,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- */
@@ -542,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 *);
 };
 
@@ -790,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;
@@ -860,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);
@@ -1104,11 +1110,18 @@ 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 *);
 int nouveau_ttm_mmap(struct file *, struct vm_area_struct *);
 
+/* nouveau_hdmi.c */
+void nouveau_hdmi_mode_set(struct drm_encoder *, struct drm_display_mode *);
+
 /* nouveau_dp.c */
 int nouveau_dp_auxch(struct nouveau_i2c_chan *auxch, int cmd, int addr,
                     uint8_t *data, int data_nr);
@@ -1338,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);
@@ -1439,6 +1458,10 @@ extern int nouveau_gem_ioctl_info(struct drm_device *, void *,
                                  struct drm_file *);
 
 /* 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,
@@ -1592,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 {