# To use this file, run in your u-boot tree:
#	git config sendemail.aliasesfile doc/git-mailrc
#	git config sendemail.aliasfiletype mutt
#
# Then when sending patches, you can use:
#	git send-email --to u-boot --cc i2c ...

alias uboot  u-boot@lists.denx.de
alias u-boot uboot

# Maintainer aliases.  Use the same alias here as patchwork to keep
# things simple and easy to look up/coordinate.
alias aaribaud       Albert Aribaud <albert.u.boot@aribaud.net>
alias abiessmann     Andreas Bießmann <andreas.devel@googlemail.com>
alias afleming       Andy Fleming <afleming@gmail.com>
alias ag             Anatolij Gustschin <agust@denx.de>
alias alisonwang     Alison Wang <alison.wang@freescale.com>
alias angelo_ts      Angelo Dureghello <angelo@sysam.it>
alias danielschwierzeck Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
alias galak          Kumar Gala <galak@kernel.crashing.org>
alias gruss          Graeme Russ <graeme.russ@gmail.com>
alias hs             Heiko Schocher <hs@denx.de>
alias ijc            Ian Campbell <ijc+uboot@hellion.org.uk>
alias iwamatsu       Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
alias jagan          Jagannadha Sutradharudu Teki <jagannadh.teki@gmail.com>
alias jasonjin       Jason Jin <jason.jin@freescale.com>
alias jhersh         Joe Hershberger <joe.hershberger@gmail.com>
alias jwrdegoede     Hans de Goede <hdegoede@redhat.com>
alias kimphill       Kim Phillips <kim.phillips@freescale.com>
alias luka           Luka Perkov <luka.perkov@sartura.hr>
alias lukma          Lukasz Majewski <l.majewski@samsung.com>
alias macpaul        Macpaul Lin <macpaul@andestech.com>
alias marex          Marek Vasut <marex@denx.de>
alias masahiro       Masahiro Yamada <yamada.m@jp.panasonic.com>
alias monstr         Michal Simek <monstr@monstr.eu>
alias panto          Pantelis Antoniou <panto@antoniou-consulting.com>
alias prafulla       Prafulla Wadaskar <prafulla@marvell.com>
alias bobenstein     Przemyslaw Marczak <p.marczak@samsung.com>
alias prom           Minkyu Kang <mk7.kang@samsung.com>
alias rbohmer        Remy Bohmer <linux@bohmer.net>
alias reinhardm      Reinhard Meyer <u-boot@emk-elektronik.de>
alias sbabic         Stefano Babic <sbabic@denx.de>
alias scottwood      Scott Wood <scottwood@freescale.com>
alias sjg            Simon Glass <sjg@chromium.org>
alias smcnutt        Scott McNutt <smcnutt@psyent.com>
alias sonic          Sonic Zhang <sonic.adi@gmail.com>
alias stroese        Stefan Roese <sr@denx.de>
alias trini          Tom Rini <trini@konsulko.com>
alias vapier         Mike Frysinger <vapier@gentoo.org>
alias wd             Wolfgang Denk <wd@denx.de>

# Architecture aliases
alias arch           arm, avr32, bfin, m68k, microblaze, mips, nds32, nios2, powerpc, sandbox, superh, sparc, x86
alias arches         arch

alias arm            uboot, aaribaud
alias at91           uboot, abiessmann
alias davinci        ti
alias imx            uboot, sbabic
alias kirkwood       uboot, prafulla, luka
alias omap           ti
alias pxa            uboot, marex
alias rmobile        uboot, iwamatsu
alias s3c            samsung
alias s5pc           samsung
alias samsung        uboot, prom
alias sunxi          uboot, ijc, jwrdegoede
alias tegra          uboot, sjg, Tom Warren <twarren@nvidia.com>, Stephen Warren <swarren@nvidia.com>
alias tegra2         tegra
alias ti             uboot, trini
alias uniphier       uboot, masahiro
alias zynq           uboot, monstr

alias avr32          uboot, abiessmann

alias bfin           uboot, vapier, sonic
alias blackfin       bfin

alias m68k           uboot, alisonwang, angelo_ts
alias coldfire       m68k

alias microblaze     uboot, monstr
alias mb             microblaze

alias mips           uboot, danielschwierzeck

alias nds32          uboot, macpaul

alias nios           uboot, Thomas Chou <thomas@wytron.com.tw>, smcnutt
alias nios2          nios

alias powerpc        uboot, afleming, kimphill, galak, stroese, wd
alias ppc            powerpc
alias mpc5xxx        uboot, wd
alias mpc8xx         uboot, wd
alias mpc82xx        uboot, wd
alias mpc83xx        uboot, kimphill
alias mpc85xx        uboot, afleming, galak
alias mpc86xx        uboot, afleming, galak
alias ppc4xx         uboot, stroese

alias sandbox        sjg
alias sb             sandbox

alias sparc          uboot, Daniel Hellstrom <daniel@gaisler.com>

alias superh         uboot, iwamatsu
alias sh             superh

alias x86            uboot, sjg, gruss

# Subsystem aliases
alias dm             uboot, sjg
alias cfi            uboot, stroese
alias dfu            uboot, lukma
alias kerneldoc      uboot, marex
alias fdt            uboot, sjg
alias i2c            uboot, hs
alias kconfig        uboot, masahiro
alias mmc            uboot, panto
alias nand           uboot, scottwood
alias net            uboot, jhersh
alias spi            uboot, jagan
alias ubi            uboot, hs
alias usb            uboot, marex
alias video          uboot, ag
alias patman         uboot, sjg
alias buildman       uboot, sjg
alias pmic           uboot, bobenstein
