uboot/drivers/w1-eeprom/eep_sandbox.c
<<
>>
Prefs
   1/* SPDX-License-Identifier:     GPL-2.0+
   2 *
   3 * Copyright (c) 2018 Microchip Technology, Inc.
   4 *
   5 */
   6
   7#include <common.h>
   8#include <linux/err.h>
   9#include <dm.h>
  10#include <w1-eeprom.h>
  11#include <w1.h>
  12
  13#define W1_F2D_READ_EEPROM      0xf0
  14
  15#define EEP_SANDBOX_SAMPLE_MEM "this is a sample EEPROM memory string."
  16
  17static int eep_sandbox_read_buf(struct udevice *dev, unsigned int offset,
  18                                u8 *buf, unsigned int count)
  19{
  20        /* do not allow to copy more than our maximum sample string */
  21        if (offset + count < strlen(EEP_SANDBOX_SAMPLE_MEM)) {
  22                offset = 0;
  23                count = strlen(EEP_SANDBOX_SAMPLE_MEM);
  24        }
  25        strncpy((char *)buf, EEP_SANDBOX_SAMPLE_MEM, count);
  26
  27        /*
  28         * in case the w1 subsystem uses some different kind of sandbox testing,
  29         * like randomized gpio values , we take the buffer from there
  30         */
  31
  32        w1_reset_select(dev);
  33
  34        w1_write_byte(dev, W1_F2D_READ_EEPROM);
  35        w1_write_byte(dev, offset & 0xff);
  36        w1_write_byte(dev, offset >> 8);
  37
  38        w1_read_buf(dev, buf, count);
  39
  40        /*
  41         * even if read buf from w1 fails, return success as we hardcoded
  42         * the buffer.
  43         */
  44        return 0;
  45}
  46
  47static const struct w1_eeprom_ops eep_sandbox_ops = {
  48        .read_buf       = eep_sandbox_read_buf,
  49};
  50
  51static const struct udevice_id eep_sandbox_id[] = {
  52        { .compatible = "sandbox,w1-eeprom", .data = W1_FAMILY_EEP_SANDBOX },
  53        { },
  54};
  55
  56U_BOOT_DRIVER(eep_sandbox) = {
  57        .name           = "eep_sandbox",
  58        .id             = UCLASS_W1_EEPROM,
  59        .of_match       = eep_sandbox_id,
  60        .ops            = &eep_sandbox_ops,
  61};
  62