blob: 830092fc7482ee6ac278c2b9fc16b58b92bc5826 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#pragma once
#include <ddktl/device.h>
#include <ddktl/i2c-channel.h>
#include <ddktl/protocol/empty-protocol.h>
#include <ddktl/protocol/gpio.h>
#include <fuchsia/hardware/backlight/c/fidl.h>
namespace backlight {
class Sgm37603a;
using DeviceType = ddk::Device<Sgm37603a, ddk::Messageable>;
class Sgm37603a : public DeviceType, public ddk::EmptyProtocol<ZX_PROTOCOL_BACKLIGHT> {
public:
virtual ~Sgm37603a() = default;
static zx_status_t Create(void* ctx, zx_device_t* parent);
void DdkRelease() { delete this; }
zx_status_t DdkMessage(fidl_msg_t* msg, fidl_txn_t* txn);
// Visible for testing.
Sgm37603a(zx_device_t* parent, ddk::I2cChannel i2c, ddk::GpioProtocolClient reset_gpio)
: DeviceType(parent), i2c_(i2c), reset_gpio_(reset_gpio) {}
virtual zx_status_t EnableBacklight();
virtual zx_status_t DisableBacklight();
zx_status_t GetBacklightState(bool* power, uint8_t* brightness);
zx_status_t SetBacklightState(bool power, uint8_t brightness);
private:
static zx_status_t GetState(void* ctx, fidl_txn_t* txn);
static zx_status_t SetState(void* ctx, const fuchsia_hardware_backlight_State* state);
static constexpr fuchsia_hardware_backlight_Device_ops_t fidl_ops_ = {
.GetState = GetState,
.SetState = SetState,
};
ddk::I2cChannel i2c_;
ddk::GpioProtocolClient reset_gpio_;
bool enabled_ = false;
uint8_t brightness_ = 0;
};
} // namespace backlight