Commit dc06e366 authored by Martin Peres's avatar Martin Peres Committed by Ben Skeggs

drm/nouveau/subdev/iccsense: add new subdev for power sensors

Signed-off-by: default avatarKarol Herbst <nouveau@karolherbst.de>
Reviewed-by: default avatarMartin Peres <martin.peres@free.fr>
parent 923f1bd2
...@@ -22,6 +22,7 @@ enum nvkm_devidx { ...@@ -22,6 +22,7 @@ enum nvkm_devidx {
NVKM_SUBDEV_BAR, NVKM_SUBDEV_BAR,
NVKM_SUBDEV_PMU, NVKM_SUBDEV_PMU,
NVKM_SUBDEV_VOLT, NVKM_SUBDEV_VOLT,
NVKM_SUBDEV_ICCSENSE,
NVKM_SUBDEV_THERM, NVKM_SUBDEV_THERM,
NVKM_SUBDEV_CLK, NVKM_SUBDEV_CLK,
NVKM_SUBDEV_SECBOOT, NVKM_SUBDEV_SECBOOT,
...@@ -110,6 +111,7 @@ struct nvkm_device { ...@@ -110,6 +111,7 @@ struct nvkm_device {
struct nvkm_gpio *gpio; struct nvkm_gpio *gpio;
struct nvkm_i2c *i2c; struct nvkm_i2c *i2c;
struct nvkm_subdev *ibus; struct nvkm_subdev *ibus;
struct nvkm_iccsense *iccsense;
struct nvkm_instmem *imem; struct nvkm_instmem *imem;
struct nvkm_ltc *ltc; struct nvkm_ltc *ltc;
struct nvkm_mc *mc; struct nvkm_mc *mc;
...@@ -166,47 +168,48 @@ struct nvkm_device_quirk { ...@@ -166,47 +168,48 @@ struct nvkm_device_quirk {
struct nvkm_device_chip { struct nvkm_device_chip {
const char *name; const char *name;
int (*bar )(struct nvkm_device *, int idx, struct nvkm_bar **); int (*bar )(struct nvkm_device *, int idx, struct nvkm_bar **);
int (*bios )(struct nvkm_device *, int idx, struct nvkm_bios **); int (*bios )(struct nvkm_device *, int idx, struct nvkm_bios **);
int (*bus )(struct nvkm_device *, int idx, struct nvkm_bus **); int (*bus )(struct nvkm_device *, int idx, struct nvkm_bus **);
int (*clk )(struct nvkm_device *, int idx, struct nvkm_clk **); int (*clk )(struct nvkm_device *, int idx, struct nvkm_clk **);
int (*devinit)(struct nvkm_device *, int idx, struct nvkm_devinit **); int (*devinit )(struct nvkm_device *, int idx, struct nvkm_devinit **);
int (*fb )(struct nvkm_device *, int idx, struct nvkm_fb **); int (*fb )(struct nvkm_device *, int idx, struct nvkm_fb **);
int (*fuse )(struct nvkm_device *, int idx, struct nvkm_fuse **); int (*fuse )(struct nvkm_device *, int idx, struct nvkm_fuse **);
int (*gpio )(struct nvkm_device *, int idx, struct nvkm_gpio **); int (*gpio )(struct nvkm_device *, int idx, struct nvkm_gpio **);
int (*i2c )(struct nvkm_device *, int idx, struct nvkm_i2c **); int (*i2c )(struct nvkm_device *, int idx, struct nvkm_i2c **);
int (*ibus )(struct nvkm_device *, int idx, struct nvkm_subdev **); int (*ibus )(struct nvkm_device *, int idx, struct nvkm_subdev **);
int (*imem )(struct nvkm_device *, int idx, struct nvkm_instmem **); int (*iccsense)(struct nvkm_device *, int idx, struct nvkm_iccsense **);
int (*ltc )(struct nvkm_device *, int idx, struct nvkm_ltc **); int (*imem )(struct nvkm_device *, int idx, struct nvkm_instmem **);
int (*mc )(struct nvkm_device *, int idx, struct nvkm_mc **); int (*ltc )(struct nvkm_device *, int idx, struct nvkm_ltc **);
int (*mmu )(struct nvkm_device *, int idx, struct nvkm_mmu **); int (*mc )(struct nvkm_device *, int idx, struct nvkm_mc **);
int (*mxm )(struct nvkm_device *, int idx, struct nvkm_subdev **); int (*mmu )(struct nvkm_device *, int idx, struct nvkm_mmu **);
int (*pci )(struct nvkm_device *, int idx, struct nvkm_pci **); int (*mxm )(struct nvkm_device *, int idx, struct nvkm_subdev **);
int (*pmu )(struct nvkm_device *, int idx, struct nvkm_pmu **); int (*pci )(struct nvkm_device *, int idx, struct nvkm_pci **);
int (*secboot)(struct nvkm_device *, int idx, struct nvkm_secboot **); int (*pmu )(struct nvkm_device *, int idx, struct nvkm_pmu **);
int (*therm )(struct nvkm_device *, int idx, struct nvkm_therm **); int (*secboot )(struct nvkm_device *, int idx, struct nvkm_secboot **);
int (*timer )(struct nvkm_device *, int idx, struct nvkm_timer **); int (*therm )(struct nvkm_device *, int idx, struct nvkm_therm **);
int (*volt )(struct nvkm_device *, int idx, struct nvkm_volt **); int (*timer )(struct nvkm_device *, int idx, struct nvkm_timer **);
int (*volt )(struct nvkm_device *, int idx, struct nvkm_volt **);
int (*bsp )(struct nvkm_device *, int idx, struct nvkm_engine **);
int (*ce[3] )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*bsp )(struct nvkm_device *, int idx, struct nvkm_engine **);
int (*cipher )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*ce[3] )(struct nvkm_device *, int idx, struct nvkm_engine **);
int (*disp )(struct nvkm_device *, int idx, struct nvkm_disp **); int (*cipher )(struct nvkm_device *, int idx, struct nvkm_engine **);
int (*dma )(struct nvkm_device *, int idx, struct nvkm_dma **); int (*disp )(struct nvkm_device *, int idx, struct nvkm_disp **);
int (*fifo )(struct nvkm_device *, int idx, struct nvkm_fifo **); int (*dma )(struct nvkm_device *, int idx, struct nvkm_dma **);
int (*gr )(struct nvkm_device *, int idx, struct nvkm_gr **); int (*fifo )(struct nvkm_device *, int idx, struct nvkm_fifo **);
int (*ifb )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*gr )(struct nvkm_device *, int idx, struct nvkm_gr **);
int (*me )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*ifb )(struct nvkm_device *, int idx, struct nvkm_engine **);
int (*mpeg )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*me )(struct nvkm_device *, int idx, struct nvkm_engine **);
int (*msenc )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*mpeg )(struct nvkm_device *, int idx, struct nvkm_engine **);
int (*mspdec )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*msenc )(struct nvkm_device *, int idx, struct nvkm_engine **);
int (*msppp )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*mspdec )(struct nvkm_device *, int idx, struct nvkm_engine **);
int (*msvld )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*msppp )(struct nvkm_device *, int idx, struct nvkm_engine **);
int (*pm )(struct nvkm_device *, int idx, struct nvkm_pm **); int (*msvld )(struct nvkm_device *, int idx, struct nvkm_engine **);
int (*sec )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*pm )(struct nvkm_device *, int idx, struct nvkm_pm **);
int (*sw )(struct nvkm_device *, int idx, struct nvkm_sw **); int (*sec )(struct nvkm_device *, int idx, struct nvkm_engine **);
int (*vic )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*sw )(struct nvkm_device *, int idx, struct nvkm_sw **);
int (*vp )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*vic )(struct nvkm_device *, int idx, struct nvkm_engine **);
int (*vp )(struct nvkm_device *, int idx, struct nvkm_engine **);
}; };
struct nvkm_device *nvkm_device_find(u64 name); struct nvkm_device *nvkm_device_find(u64 name);
......
#ifndef __NVKM_ICCSENSE_H__
#define __NVKM_ICCSENSE_H__
#include <core/subdev.h>
struct nvkm_iccsense {
struct nvkm_subdev subdev;
};
#endif
...@@ -29,48 +29,49 @@ static struct lock_class_key nvkm_subdev_lock_class[NVKM_SUBDEV_NR]; ...@@ -29,48 +29,49 @@ static struct lock_class_key nvkm_subdev_lock_class[NVKM_SUBDEV_NR];
const char * const char *
nvkm_subdev_name[NVKM_SUBDEV_NR] = { nvkm_subdev_name[NVKM_SUBDEV_NR] = {
[NVKM_SUBDEV_BAR ] = "bar", [NVKM_SUBDEV_BAR ] = "bar",
[NVKM_SUBDEV_VBIOS ] = "bios", [NVKM_SUBDEV_VBIOS ] = "bios",
[NVKM_SUBDEV_BUS ] = "bus", [NVKM_SUBDEV_BUS ] = "bus",
[NVKM_SUBDEV_CLK ] = "clk", [NVKM_SUBDEV_CLK ] = "clk",
[NVKM_SUBDEV_DEVINIT] = "devinit", [NVKM_SUBDEV_DEVINIT ] = "devinit",
[NVKM_SUBDEV_FB ] = "fb", [NVKM_SUBDEV_FB ] = "fb",
[NVKM_SUBDEV_FUSE ] = "fuse", [NVKM_SUBDEV_FUSE ] = "fuse",
[NVKM_SUBDEV_GPIO ] = "gpio", [NVKM_SUBDEV_GPIO ] = "gpio",
[NVKM_SUBDEV_I2C ] = "i2c", [NVKM_SUBDEV_I2C ] = "i2c",
[NVKM_SUBDEV_IBUS ] = "priv", [NVKM_SUBDEV_IBUS ] = "priv",
[NVKM_SUBDEV_INSTMEM] = "imem", [NVKM_SUBDEV_ICCSENSE] = "iccsense",
[NVKM_SUBDEV_LTC ] = "ltc", [NVKM_SUBDEV_INSTMEM ] = "imem",
[NVKM_SUBDEV_MC ] = "mc", [NVKM_SUBDEV_LTC ] = "ltc",
[NVKM_SUBDEV_MMU ] = "mmu", [NVKM_SUBDEV_MC ] = "mc",
[NVKM_SUBDEV_MXM ] = "mxm", [NVKM_SUBDEV_MMU ] = "mmu",
[NVKM_SUBDEV_PCI ] = "pci", [NVKM_SUBDEV_MXM ] = "mxm",
[NVKM_SUBDEV_PMU ] = "pmu", [NVKM_SUBDEV_PCI ] = "pci",
[NVKM_SUBDEV_SECBOOT] = "secboot", [NVKM_SUBDEV_PMU ] = "pmu",
[NVKM_SUBDEV_THERM ] = "therm", [NVKM_SUBDEV_SECBOOT ] = "secboot",
[NVKM_SUBDEV_TIMER ] = "tmr", [NVKM_SUBDEV_THERM ] = "therm",
[NVKM_SUBDEV_VOLT ] = "volt", [NVKM_SUBDEV_TIMER ] = "tmr",
[NVKM_ENGINE_BSP ] = "bsp", [NVKM_SUBDEV_VOLT ] = "volt",
[NVKM_ENGINE_CE0 ] = "ce0", [NVKM_ENGINE_BSP ] = "bsp",
[NVKM_ENGINE_CE1 ] = "ce1", [NVKM_ENGINE_CE0 ] = "ce0",
[NVKM_ENGINE_CE2 ] = "ce2", [NVKM_ENGINE_CE1 ] = "ce1",
[NVKM_ENGINE_CIPHER ] = "cipher", [NVKM_ENGINE_CE2 ] = "ce2",
[NVKM_ENGINE_DISP ] = "disp", [NVKM_ENGINE_CIPHER ] = "cipher",
[NVKM_ENGINE_DMAOBJ ] = "dma", [NVKM_ENGINE_DISP ] = "disp",
[NVKM_ENGINE_FIFO ] = "fifo", [NVKM_ENGINE_DMAOBJ ] = "dma",
[NVKM_ENGINE_GR ] = "gr", [NVKM_ENGINE_FIFO ] = "fifo",
[NVKM_ENGINE_IFB ] = "ifb", [NVKM_ENGINE_GR ] = "gr",
[NVKM_ENGINE_ME ] = "me", [NVKM_ENGINE_IFB ] = "ifb",
[NVKM_ENGINE_MPEG ] = "mpeg", [NVKM_ENGINE_ME ] = "me",
[NVKM_ENGINE_MSENC ] = "msenc", [NVKM_ENGINE_MPEG ] = "mpeg",
[NVKM_ENGINE_MSPDEC ] = "mspdec", [NVKM_ENGINE_MSENC ] = "msenc",
[NVKM_ENGINE_MSPPP ] = "msppp", [NVKM_ENGINE_MSPDEC ] = "mspdec",
[NVKM_ENGINE_MSVLD ] = "msvld", [NVKM_ENGINE_MSPPP ] = "msppp",
[NVKM_ENGINE_PM ] = "pm", [NVKM_ENGINE_MSVLD ] = "msvld",
[NVKM_ENGINE_SEC ] = "sec", [NVKM_ENGINE_PM ] = "pm",
[NVKM_ENGINE_SW ] = "sw", [NVKM_ENGINE_SEC ] = "sec",
[NVKM_ENGINE_VIC ] = "vic", [NVKM_ENGINE_SW ] = "sw",
[NVKM_ENGINE_VP ] = "vp", [NVKM_ENGINE_VIC ] = "vic",
[NVKM_ENGINE_VP ] = "vp",
}; };
void void
......
...@@ -2107,27 +2107,28 @@ nvkm_device_subdev(struct nvkm_device *device, int index) ...@@ -2107,27 +2107,28 @@ nvkm_device_subdev(struct nvkm_device *device, int index)
switch (index) { switch (index) {
#define _(n,p,m) case NVKM_SUBDEV_##n: if (p) return (m); break #define _(n,p,m) case NVKM_SUBDEV_##n: if (p) return (m); break
_(BAR , device->bar , &device->bar->subdev); _(BAR , device->bar , &device->bar->subdev);
_(VBIOS , device->bios , &device->bios->subdev); _(VBIOS , device->bios , &device->bios->subdev);
_(BUS , device->bus , &device->bus->subdev); _(BUS , device->bus , &device->bus->subdev);
_(CLK , device->clk , &device->clk->subdev); _(CLK , device->clk , &device->clk->subdev);
_(DEVINIT, device->devinit, &device->devinit->subdev); _(DEVINIT , device->devinit , &device->devinit->subdev);
_(FB , device->fb , &device->fb->subdev); _(FB , device->fb , &device->fb->subdev);
_(FUSE , device->fuse , &device->fuse->subdev); _(FUSE , device->fuse , &device->fuse->subdev);
_(GPIO , device->gpio , &device->gpio->subdev); _(GPIO , device->gpio , &device->gpio->subdev);
_(I2C , device->i2c , &device->i2c->subdev); _(I2C , device->i2c , &device->i2c->subdev);
_(IBUS , device->ibus , device->ibus); _(IBUS , device->ibus , device->ibus);
_(INSTMEM, device->imem , &device->imem->subdev); _(ICCSENSE, device->iccsense, &device->iccsense->subdev);
_(LTC , device->ltc , &device->ltc->subdev); _(INSTMEM , device->imem , &device->imem->subdev);
_(MC , device->mc , &device->mc->subdev); _(LTC , device->ltc , &device->ltc->subdev);
_(MMU , device->mmu , &device->mmu->subdev); _(MC , device->mc , &device->mc->subdev);
_(MXM , device->mxm , device->mxm); _(MMU , device->mmu , &device->mmu->subdev);
_(PCI , device->pci , &device->pci->subdev); _(MXM , device->mxm , device->mxm);
_(PMU , device->pmu , &device->pmu->subdev); _(PCI , device->pci , &device->pci->subdev);
_(SECBOOT, device->secboot, &device->secboot->subdev); _(PMU , device->pmu , &device->pmu->subdev);
_(THERM , device->therm , &device->therm->subdev); _(SECBOOT , device->secboot , &device->secboot->subdev);
_(TIMER , device->timer , &device->timer->subdev); _(THERM , device->therm , &device->therm->subdev);
_(VOLT , device->volt , &device->volt->subdev); _(TIMER , device->timer , &device->timer->subdev);
_(VOLT , device->volt , &device->volt->subdev);
#undef _ #undef _
default: default:
engine = nvkm_device_engine(device, index); engine = nvkm_device_engine(device, index);
...@@ -2557,48 +2558,49 @@ nvkm_device_ctor(const struct nvkm_device_func *func, ...@@ -2557,48 +2558,49 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
} \ } \
break break
switch (i) { switch (i) {
_(NVKM_SUBDEV_BAR , bar); _(NVKM_SUBDEV_BAR , bar);
_(NVKM_SUBDEV_VBIOS , bios); _(NVKM_SUBDEV_VBIOS , bios);
_(NVKM_SUBDEV_BUS , bus); _(NVKM_SUBDEV_BUS , bus);
_(NVKM_SUBDEV_CLK , clk); _(NVKM_SUBDEV_CLK , clk);
_(NVKM_SUBDEV_DEVINIT, devinit); _(NVKM_SUBDEV_DEVINIT , devinit);
_(NVKM_SUBDEV_FB , fb); _(NVKM_SUBDEV_FB , fb);
_(NVKM_SUBDEV_FUSE , fuse); _(NVKM_SUBDEV_FUSE , fuse);
_(NVKM_SUBDEV_GPIO , gpio); _(NVKM_SUBDEV_GPIO , gpio);
_(NVKM_SUBDEV_I2C , i2c); _(NVKM_SUBDEV_I2C , i2c);
_(NVKM_SUBDEV_IBUS , ibus); _(NVKM_SUBDEV_IBUS , ibus);
_(NVKM_SUBDEV_INSTMEM, imem); _(NVKM_SUBDEV_ICCSENSE, iccsense);
_(NVKM_SUBDEV_LTC , ltc); _(NVKM_SUBDEV_INSTMEM , imem);
_(NVKM_SUBDEV_MC , mc); _(NVKM_SUBDEV_LTC , ltc);
_(NVKM_SUBDEV_MMU , mmu); _(NVKM_SUBDEV_MC , mc);
_(NVKM_SUBDEV_MXM , mxm); _(NVKM_SUBDEV_MMU , mmu);
_(NVKM_SUBDEV_PCI , pci); _(NVKM_SUBDEV_MXM , mxm);
_(NVKM_SUBDEV_PMU , pmu); _(NVKM_SUBDEV_PCI , pci);
_(NVKM_SUBDEV_SECBOOT, secboot); _(NVKM_SUBDEV_PMU , pmu);
_(NVKM_SUBDEV_THERM , therm); _(NVKM_SUBDEV_SECBOOT , secboot);
_(NVKM_SUBDEV_TIMER , timer); _(NVKM_SUBDEV_THERM , therm);
_(NVKM_SUBDEV_VOLT , volt); _(NVKM_SUBDEV_TIMER , timer);
_(NVKM_ENGINE_BSP , bsp); _(NVKM_SUBDEV_VOLT , volt);
_(NVKM_ENGINE_CE0 , ce[0]); _(NVKM_ENGINE_BSP , bsp);
_(NVKM_ENGINE_CE1 , ce[1]); _(NVKM_ENGINE_CE0 , ce[0]);
_(NVKM_ENGINE_CE2 , ce[2]); _(NVKM_ENGINE_CE1 , ce[1]);
_(NVKM_ENGINE_CIPHER , cipher); _(NVKM_ENGINE_CE2 , ce[2]);
_(NVKM_ENGINE_DISP , disp); _(NVKM_ENGINE_CIPHER , cipher);
_(NVKM_ENGINE_DMAOBJ , dma); _(NVKM_ENGINE_DISP , disp);
_(NVKM_ENGINE_FIFO , fifo); _(NVKM_ENGINE_DMAOBJ , dma);
_(NVKM_ENGINE_GR , gr); _(NVKM_ENGINE_FIFO , fifo);
_(NVKM_ENGINE_IFB , ifb); _(NVKM_ENGINE_GR , gr);
_(NVKM_ENGINE_ME , me); _(NVKM_ENGINE_IFB , ifb);
_(NVKM_ENGINE_MPEG , mpeg); _(NVKM_ENGINE_ME , me);
_(NVKM_ENGINE_MSENC , msenc); _(NVKM_ENGINE_MPEG , mpeg);
_(NVKM_ENGINE_MSPDEC , mspdec); _(NVKM_ENGINE_MSENC , msenc);
_(NVKM_ENGINE_MSPPP , msppp); _(NVKM_ENGINE_MSPDEC , mspdec);
_(NVKM_ENGINE_MSVLD , msvld); _(NVKM_ENGINE_MSPPP , msppp);
_(NVKM_ENGINE_PM , pm); _(NVKM_ENGINE_MSVLD , msvld);
_(NVKM_ENGINE_SEC , sec); _(NVKM_ENGINE_PM , pm);
_(NVKM_ENGINE_SW , sw); _(NVKM_ENGINE_SEC , sec);
_(NVKM_ENGINE_VIC , vic); _(NVKM_ENGINE_SW , sw);
_(NVKM_ENGINE_VP , vp); _(NVKM_ENGINE_VIC , vic);
_(NVKM_ENGINE_VP , vp);
default: default:
WARN_ON(1); WARN_ON(1);
continue; continue;
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <subdev/gpio.h> #include <subdev/gpio.h>
#include <subdev/i2c.h> #include <subdev/i2c.h>
#include <subdev/ibus.h> #include <subdev/ibus.h>
#include <subdev/iccsense.h>
#include <subdev/instmem.h> #include <subdev/instmem.h>
#include <subdev/ltc.h> #include <subdev/ltc.h>
#include <subdev/mc.h> #include <subdev/mc.h>
......
...@@ -8,6 +8,7 @@ include $(src)/nvkm/subdev/fuse/Kbuild ...@@ -8,6 +8,7 @@ include $(src)/nvkm/subdev/fuse/Kbuild
include $(src)/nvkm/subdev/gpio/Kbuild include $(src)/nvkm/subdev/gpio/Kbuild
include $(src)/nvkm/subdev/i2c/Kbuild include $(src)/nvkm/subdev/i2c/Kbuild
include $(src)/nvkm/subdev/ibus/Kbuild include $(src)/nvkm/subdev/ibus/Kbuild
include $(src)/nvkm/subdev/iccsense/Kbuild
include $(src)/nvkm/subdev/instmem/Kbuild include $(src)/nvkm/subdev/instmem/Kbuild
include $(src)/nvkm/subdev/ltc/Kbuild include $(src)/nvkm/subdev/ltc/Kbuild
include $(src)/nvkm/subdev/mc/Kbuild include $(src)/nvkm/subdev/mc/Kbuild
......
nvkm-y += nvkm/subdev/iccsense/base.o
/*
* Copyright 2015 Martin Peres
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* Authors: Martin Peres
*/
#include "priv.h"
struct nvkm_subdev_func iccsense_func = { 0 };
void
nvkm_iccsense_ctor(struct nvkm_device *device, int index,
struct nvkm_iccsense *iccsense)
{
nvkm_subdev_ctor(&iccsense_func, device, index, 0, &iccsense->subdev);
}
int
nvkm_iccsense_new_(struct nvkm_device *device, int index,
struct nvkm_iccsense **iccsense)
{
if (!(*iccsense = kzalloc(sizeof(**iccsense), GFP_KERNEL)))
return -ENOMEM;
nvkm_iccsense_ctor(device, index, *iccsense);
return 0;
}
#ifndef __NVKM_ICCSENSE_PRIV_H__
#define __NVKM_ICCSENSE_PRIV_H__
#define nvkm_iccsense(p) container_of((p), struct nvkm_iccsense, subdev)
#include <subdev/iccsense.h>
void nvkm_iccsense_ctor(struct nvkm_device *, int, struct nvkm_iccsense *);
int nvkm_iccsense_new_(struct nvkm_device *, int, struct nvkm_iccsense **);
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment